λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
2️⃣ Java/Problem Solving

[Java Algorithm] μ‹ κΈ°ν•œ μ†Œμˆ˜ BOJ #2023

by seolhee2750 2022. 8. 5.
문제

https://www.acmicpc.net/problem/2023

 

2023번: μ‹ κΈ°ν•œ μ†Œμˆ˜

μˆ˜λΉˆμ΄κ°€ μ„Έμƒμ—μ„œ κ°€μž₯ μ’‹μ•„ν•˜λŠ” 것은 μ†Œμˆ˜μ΄κ³ , μ·¨λ―ΈλŠ” μ†Œμˆ˜λ₯Ό 가지고 λ…ΈλŠ” 것이닀. μš”μ¦˜ μˆ˜λΉˆμ΄κ°€ κ°€μž₯ κ΄€μ‹¬μžˆμ–΄ ν•˜λŠ” μ†Œμˆ˜λŠ” 7331이닀. 7331은 μ†Œμˆ˜μΈλ°, μ‹ κΈ°ν•˜κ²Œλ„ 733도 μ†Œμˆ˜μ΄κ³ , 73도 μ†Œμˆ˜

www.acmicpc.net

 

λ‚΄ 문제 풀이
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Deque;
import java.util.Scanner;

public class BOJ_2023 {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		Deque<Integer> que = new ArrayDeque<>(Arrays.asList(2, 3, 5, 7));
		int[] secondNums = {1, 3, 7, 9};
		boolean isFirst = true;
		int[] toPlus = new int[n];
		toPlus[0] = 1;
		for(int i = 1; i < n; i++) toPlus[i] = toPlus[i-1] * 10;
		int idx = 0;
		
		mainLoop:
		while(true) {
			int num = que.removeFirst();
			
			if(idx >= 4) {
				for(int i = 2; i <= Math.sqrt(num); i++) {
					if(num % i == 0) continue mainLoop;
				}
			}
			
			for(int i: secondNums) {
				String tmp = Integer.toString(num);
				if(tmp.length() == n) {
					que.addFirst(num);
					break mainLoop;
				}
	
				que.add(i + (num * 10)); // 자릿수 늘렀주며 수 λ”ν•˜κΈ°
			}
			
			if(idx <= 4) idx++;
		}
		
		printLoop:
		while(que.size() > 0) {
			int num = que.removeFirst();
			for(int i = 2; i <= Math.sqrt(num); i++) {
				if(num % i == 0) continue printLoop;
			}
			System.out.println(num);
		}
	}
}

πŸ‘‰ κ΅¬ν˜„ 문제 !

이 λ¬Έμ œλŠ” 무엇보닀 μ†Œμˆ˜ νŒλ³„κ³Ό 'μ‹ κΈ°ν•œ μ†Œμˆ˜'의 κ·œμΉ™μ„ μ°Ύμ•„λ‚΄λŠ” 것이 μ€‘μš”ν•œ 것 κ°™λ‹€.

 

[ 'μ‹ κΈ°ν•œ μ†Œμˆ˜'의 κ·œμΉ™ ]

  1. μ‹ κΈ°ν•œ μ†Œμˆ˜μ˜ 경우 첫 번째 κΈ€μžλŠ” κΌ­ μ†Œμˆ˜μ—¬μ•Όλ§Œ ν•œλ‹€.
    -> 2, 3, 5, 7 λ„€ 숫자만이 첫 번째 μžλ¦¬μ— 올 수 μžˆλ‹€.
  2. μ‹ κΈ°ν•œ μ†Œμˆ˜μ˜ 두 번째 κΈ€μžλΆ€ν„°λŠ” κΌ­ ν™€μˆ˜μ΄λ©° 5κ°€ μ•„λ‹ˆμ–΄μ•Ό ν•œλ‹€.
    -> 1, 3, 7, 9 λ„€ 숫자만이 두 번째 μ΄μƒμ˜ μžλ¦¬μ— 올 수 μžˆλ‹€.

[ μ†Œμˆ˜ νŒλ³„λ²• ]

μ†Œμˆ˜λŠ” 1κ³Ό μžκΈ°μžμ‹ μœΌλ‘œλ§Œ λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λŠ” 수λ₯Ό λ§ν•œλ‹€.
λ”°λΌμ„œ 2λΆ€ν„° 자기 μžμ‹ μ˜ μ „κΉŒμ§€ λ‚˜λˆ„μ–΄ λ³Ό 수 μžˆκ² μ§€λ§Œ,

자기 μžμ‹ κΉŒμ§€ 비ꡐ해볼 ν•„μš” 없이, μ œκ³±κ·ΌκΉŒμ§€λ§Œ λ‚˜λˆ„μ–΄λ„ 확인이 κ°€λŠ₯ν•˜λ‹€.

 

πŸ’‘ ν”Όλ“œλ°±
  • μ†Œμˆ˜ νŒλ³„λ²•λ§Œ 잘 μ•Œκ³  μžˆλ‹€λ©΄ μ‰½κ²Œ ν’€ 수 μžˆλŠ” λ¬Έμ œμ˜€λ‹€.

λŒ“κΈ€