https://www.acmicpc.net/problem/1291
1291번: 이면수와 임현수
11은 메갈루젼 문명의 어비스 오엘 우테에 속하지만 각 자리수의 총합이 1+1=2, 즉 짝수이므로 이면수가 아니고 chicken number혹은 starcraft number도 아니고 합성수도 아니므로 임현수가 아니다. 고로
www.acmicpc.net
설명이 되게 긴데 읽어보면 말장난 위주여서 재미있었다.
우선 요약하자면
1. 어떤 숫자가 “이면수”이기 위해서는 [어비스 오엘 우테(absolute)]에 속해 있어야 하고, 각 자릿수의 합이 홀수여야 한다.
여기서 어비스 오엘 우테는 2와 3의 합으로 표현되는 숫자들, 즉 6, 7, 8, 9, 10 ... 을 말한다.
2. 어떤 숫자가 "임현수“이기 위해서는 그 숫자가 자체가 월드 문명의 chicken number 혹은 starcraft number이거나 합성수이면서 소인수 분해를 했을 때 소인수의 종류의 개수가 짝수개 이어야 한다.
여기서 chicken number와 starcraft number 은 각각 4, 2를 의미한다.
3. 이면수이면 1, 임현수이면 2, 임현수와 이면수 둘다 아니면 3, 둘다 이면 4를 출력한다.
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int digit(int n) {
int a = 0;
while (1) {
int b = n / pow(10, a);
if (b < 10)
{
break;
}
a++;
}
return a + 1;
}
bool check소수(int n) {
int a = 2;
if (n == 1) {
return false;
}
else {
while (1) {
int b = n % a;
if (b == 0) {
break;
}
a++;
}
if (n == a) {
return true;
}
else {
return false;
}
}
}
bool check이면수(int n) {
int temp = n;
int a = digit(n);
vector<int> v;
while (a>1) {
int i = n / pow(10, a - 1);
v.push_back(i);
n = n - (i * pow(10, a - 1));
a--;
}
v.push_back(n);
int b = 0;
for (int i = 0; i < v.size(); i++) {
b += v[i];
}
if (temp >= 4 && temp!=5 && b % 2 == 1) {
return true;
}
else {
return false;
}
}
bool check임현수(int n) {
vector<int> v;
if (n == 2 || n == 4) {
return true;
}
else if (check소수(n) == true || n==1) {
return false;
}
else {
for (int i = 2; i < n; i++) {
int a = n % i;
if (a == 0 && check소수(i)==true) {
v.push_back(i);
}
}
if (v.size() % 2 == 0) {
return true;
}
else {
return false;
}
}
}
int main() {
int n;
cin >> n;
if (check임현수(n) == true && check이면수(n) == true) {
cout << 4;
}
else {
if (check이면수(n) == true) {
cout << 1;
}
else if(check임현수(n)==true) {
cout << 2;
}
else {
cout << 3;
}
}
}
조금 복잡하긴 하지만, 자리수 체크와 소수 판정, 이면수와 임현수를 판정하는 함수들을 각각 만들어 주었다. 1의 경우 예외처리가 필요했다.
'백준' 카테고리의 다른 글
백준 1052번 - 물병 (0) | 2024.01.19 |
---|---|
백준 1074번 - Z (0) | 2023.07.25 |
백준 1002번 - 터렛 (0) | 2023.07.23 |
백준 1051번 - 숫자 정사각형 (0) | 2023.07.21 |
백준 2108번 - 통계학 (0) | 2023.07.21 |