본문 바로가기

알고리즘/인프런

섹션 2. Array(1, 2차원 배열)_6. 뒤집은 소수

문제

  • N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 소수를 출력하는 프로그램을 작성하세요.
  • 예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력한다. 단 910를 뒤집으면 19로 숫자화 해야 한다.
  • 첫 자리부터의 연속된 0은 무시한다.

입력

  • 첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다.
  • 각 자연수의 크기는 100,000를 넘지 않는다.

출력

  • 첫 줄에 뒤집은 소수를 출력합니다. 출력순서는 입력된 순서대로 출력합니다.

입출력 예제


풀이 방식을 정리해보자.

 

1. 입력받을 자연수의 개수 N을 선언하고, for문을 통해 N만큼 수를 입력받는다.

 

2. 소수인 수를 담을 배열 arr[] 을 선언한다.

 

3. 이제 메소드를 구현할건데, 총 2가지를 구현할 것이다.

  • 자연수를 뒤집는 메소드
  • 소수임을 판별할 메소드

4. 먼저 자연수를 뒤집는 메소드를 작성해보자.

 

5. 배열 형태로 리턴받을 것이기에 배열 형으로 선언한다.

 

6. 0부터 N까지 도는  for문을 작성한다.

  • 이 안에서 각 자릿수를 사용해서 수를 뒤집을것이다.

7. 뒤집은 자연수를 저장할 변수 res를 선언하고, tmp에 배열에 들어있는 자연수를 넣는다.

 

8. tmp가 0보다 크기 전까지 도는 while문을 선언하고 몫과 나머지를 사용해서 자연수를 뒤집을 것이다.

 

9. 임의의 변수 t를 선언하고, tmp에 들어간 자연수를 10으로 나눈 나머지 값을 저장한다.

 

10. res 에는 res + 10 + t 라는 식을 이용해서 자리를 바꿔준다.

 

11. tmp를 10으로 나눠서 몫만 남긴다.

  • 예를 들어 123이라는 수로 식을 진행하게 되면 다음과 같다.
  • t에는 [123 % 10] 을 해서 123을 10으로 나눈 나머지인 3이라는 값이 들어간다.
  • res에는 초기값이 0이므로 [0 * 10 + 3] 이라는 식을 통해 3이라는 값이 들어간다.
  • tmp는 123을 10으로 나눈 몫인 12라는 값이 들어간다.
  • 두번째 턴이 되면, t에는 [12 % 10] 을 해서 2라는 값이 들어간다.
  • res는 [3 * 10 + 2] 를 통해 32라는 값이 들어간다.
  • tmp는 12를 10으로 나눈 몫인 1이 들어간다.
  • 세번째 턴이 되면, t에는 [1 % 10] 을 해서 1이라는 값이 들어간다.
  • res에는 [32 * 10 + 1] 을 해서 32이라는 값이 들어간다.
  • 이렇게 최종적으로 자연수가 뒤바뀌는 것이다.

12. 다음으로는 소수임을 확인하는 메소드를 구현해야한다.

 

13. 받아야할 값이 true/false 이므로 boolean형으로 선언한다.

 

14. num이라는 자연수를 받는데, 1은 소수가 아니므로 false를 리턴한다.

 

15. 2부터 num까지 도는 for문을 작성하는데, i로 나누었을 때에 나누어 떨어지면 소수가 아니므로 false를 리턴한다.

 

16. 위 두 경우가 전부 아니라면 소수이기에 true를 리턴한다.

 

수행 결과를 확인한다.


해당 글은 인프런 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비(김태원)강의를 참고하여 작성하였습니다.