백준 - 2501번: 약수 구하기

Lee·2023년 3월 22일
0

알고리즘

목록 보기
5/34
post-thumbnail

문제 출처

문제 출처 : 2501번: 약수 구하기

문제 이해하기

  • 자연수 p와 q가 주어졌을 때 p를 q로 나누었을 때 나머지가 0이면 q는 p의 약수이다.
  • 더 쉽게 이야기하면 자연수 6의 약수를 순서대로 구하라는 의미와 동일합니다.
  • 6의 약수들 중에서도 K번째의 수를 결과로 출력해주면 되는 문제입니다.

주요 조건 이해하기 ⭐️

  • 별다른 설명은 필요없어서 바로 코드로 보겠습니다.
  • 이해하기 쉽게 각 역할별로 주석을 남겨뒀습니다.

주의할 점

  • 예시로 나온 입력 데이터 외에 테스트 데이터를 몇 개씩 더 넣어봐야 추후 제출할 때 실패가 나올 확률이 줄어듭니다.

  • 반례 예시 ) 5 2 -> 5, 3 2 -> 3

최종 소스 파일

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ_2501 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");

		int N = Integer.parseInt(st.nextToken());
		int K = Integer.parseInt(st.nextToken());

		int count = 0;
		int[] array = new int[N + 1];

		// 1. 약수의 갯수 구하기
		// 만약 약수라면 array 배열의 약수 값이 들어가고, 그렇지 않으면 -1이 들어감
		for (int i = 1; i <= N; i++) {
			if (N % i == 0) {
				array[i] = i;
				count++;
			} else {
				array[i] = -1;
			}
		}

		// 2. 만약 count가 K보다 작으면 0을 리턴
		if (count < K) {
			System.out.println(0);
			System.exit(0);

		}

		// 3. array 탐색하면서 K번째 값 리턴 (반레 5 2)
		int answer = 0;
		int findIdx = 0;
		for (int i = 1; i <= N; i++) {
			if (array[i] != -1) {
				answer++;
				findIdx = i;
			}

			if (answer == K) {
				System.out.println(array[findIdx]);
				System.exit(0);
			}
		}
	}

}

0개의 댓글