[알고리즘] 문제풀이 연습

[알골 90제] 14번 - 뒤집은 소수

ddgoori 2019. 7. 13. 19:52

N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 수를 출력하는 프로그램을 작성하세요. 예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력 한다. 단 910를 뒤집으면 19로 숫자화 해야 한다. 첫 자리부터의 연속된 0은 무시한다. 뒤집는 함수인 int reverse(int x) 와 소수인지를 확인하는 함수 bool isPrime(int x)를 반드시 작성하여 프로그래밍 한다.

 

입력

5

32 55 62 3700 250

 

출력

23 73

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int reverse(int x) {
	
	int result = 0, tmp;
	while (x > 0) {
		tmp = x % 10;
		result = result * 10 + tmp;
		x = x / 10;
	}
	return result;

}

bool isPrime(int x) {

	int i;
	if (x == 1)return false;
	bool flag = true;
	for (i = 2; i < x;i++) {
		if (x % i == 0) {
			flag = false;
			break;
		}
	}
	return flag;
}


int main() {

	int N, num, tmp;
	
	scanf("%d", &N);
	for (int i = 1; i <= N; i++) {
		scanf("%d", &num);
		tmp = reverse(num);
		if (isPrime(tmp)) printf("%d ",tmp);
	}
	return 0;
}

 

  • 입력된 숫자를 뒤집는 함수 알고리즘 익히기 
  • bool 함수로 소수인지 아닌지 판별하는 알고리즘 익히기. 이때 주의할 것은 1은 소수가 아니기 때문에 만약 1이 입력되면 false를 반환하는것이 중요하다.
  • N을 받고, N만큼 for문을 돌린다. for문안에는 scanf로 숫자를 받고 뒤집고 -> 소수를 체크하는 함수를 넣는다.
  • 이런식으로 코드를 짜면, scanf받은 첫 숫자 => 결과, 그리고 그 다음 숫자 scanf로 입력받기 => 결과 . . . N만큼 반복 이런식으로 나온다고 생각했었는데, 결과는 N 만큼 숫자를 전부 입력한 다음에 한꺼번에 출력된다.