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

+ Recent posts