-
[๋ฐฑ์ค/JAVA] 18311๋ฒ : ํฐ ์ ๊ตฌ์ฑํ๊ธฐAlgorithm 2024. 11. 10. 20:55
https://www.acmicpc.net/problem/18511
๐ ๋ฌธ์ ์์ฝ
- ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์ ์ค์์, ์งํฉ KK์ ์์๋ก๋ง ๊ตฌ์ฑ๋ ๊ฐ์ฅ ํฐ ์๋ฅผ ์ฐพ์์ผ ํ๋ค.
- KK์ ์์๋ 1๋ถํฐ 9๊น์ง์ ์์ฐ์๋ก ์ ํ๋๋ค.
- ํญ์ NN๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์๋ฅผ ๋ง๋ค ์ ์๋ค๊ณ ๊ฐ์ ํ๋ค.
[ ์ค๋ต ๋ ธํธ ]
โ ๊ธฐ์กด ์ค๋ต ์ฝ๋import java.io.*; import java.util.*; public class Main { 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()); // 657 int K = Integer.parseInt(st.nextToken()); // 3 StringTokenizer st2 = new StringTokenizer(br.readLine()); int answer = 0; for(int i = N; i >= 1; i--) { // i ์ซ์๋ฅผ ๋ฌธ์์ด ๋ณํ ํ ๊ฐ ์๋ฆฟ์ซ์๊ฐ 1,5,7 ๋ก ์ด๋ฃจ์ด์ ธ์์ผ๋จ for(int j = 0; j < K; j++) { if(String.valueOf(i).charAt(j) != st2.nextToken().charAt(0)){ break; }else { answer = i; break; } } } System.out.println(answer); } }
๐ ๊ธฐ์กด ์ฝ๋์ ๋ฌธ์ ์ 1. K์ ์์๋ฅผ ์ ๋๋ก ํ์ฉํ์ง ๋ชปํจ
- st2.nextToken()์ผ๋ก K์ ์์๋ฅผ ๋งค๋ฒ ํ๋์ฉ ๋ถ๋ฌ์ค์ง๋ง, ์ด ๋ฐฉ์์ K์ ๋ชจ๋ ์์๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ๋น๊ตํด์ผ ํ๋ ๋ฌธ์ ์ ์ ํฉํ์ง ์๋ค.
- K์ ์์๋ฅผ ๋ฐฐ์ด์ ์ ์ฅํด ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค.
2. ๋นํจ์จ์ ์ธ ํ์ ๋ฐฉ์
- ๋ถํฐ 1๊น์ง ๋ชจ๋ ์์ฐ์๋ฅผ ํ์ํ๋ฉฐ ์๋ฆฟ์๋ฅผ ํ์ธํ๋ ๋ฐฉ์์ ๋นํจ์จ์ ์ด๋ค
- ์๋ฅผ ๋ค์ด, N=10000000์ผ ๋ ๋ถํ์ํ ํ์์ด ๋๋ฌด ๋ง์์ง๋ค
3. ์๋ฆฟ์ ๋น๊ต์ ๋ ผ๋ฆฌ ์ค๋ฅ
String.valueOf(i).charAt(j)๋ก i์ ์๋ฆฟ์์ K์ ์์๋ฅผ ๋น๊ตํ๋ ค ํ์ง๋ง, ์ด๋ ์๋ฆฟ์ ๊ฐ์๊ฐ ๋ค๋ฅผ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
[ ์ ๋ต ์ฝ๋ & ์ฌ๋ฐ๋ฅธ ํ์ด ]
๐ ์ฌ๋ฐ๋ฅธ ํ์ด1. K์ ์์๋ฅผ ์ ๋๋ก ํ์ฉํ์ง ๋ชปํ ๋ฌธ์ ํด๊ฒฐ
์ ์์๋ฅผ ๋ฐฐ์ด์ ์ ์ฅํ๊ณ , ์ด๋ฅผ ์ ๋ ฌํ์ฌ ํฐ ์ซ์๋ถํฐ ํ์
arr = new int[K]; for(int i = 0; i < K; i++) { arr[i] = Integer.parseInt(st2.nextToken()); // [1,5,7] }
2. ๊น์ด ์ฐ์ ํ์(DFS) ๋์
- ์์ฐ์๋ฅผ ์๋ฆฟ์๋ณ๋ก ํ์ฅํ๋ฉด์ ๊ฐ๋ฅํ ์กฐํฉ์ ํ์.
- ์กฐ๊ฑด: total์ด N๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๋๋ง ๊ณ์ ํ์
if(total > N) return; // 657๋ณด๋ค ํฌ๋ฉด ๋ฐํ if(answer < total) answer = total; // ๋ต ๊ณ์ ๊ฐฑ์
3. ํฐ ์ซ์๋ถํฐ ํ์
K์ ์์๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ํ์ํ์ฌ ๊ฐ๋ฅํ ํฐ ์๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ฐพ์.
for(int i = K; i >= 1; i--) { // ํฐ ์ซ์๋ถํฐ ํ์ // ๋ค์ ์๋ฆฟ์๋ฅผ ๋ถ์ dfs(total * 10 + arr[i]);
๐ ์ ๋ต ์ฝ๋import java.io.*; import java.util.*; public class Main { public static int N, K, answer; public static int[] arr; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); // 657 K = Integer.parseInt(st.nextToken()); // 3 StringTokenizer st2 = new StringTokenizer(br.readLine()); arr = new int[K]; for(int i = 0; i < K; i++) { arr[i] = Integer.parseInt(st2.nextToken()); // [1,5,7] } Arrays.sort(arr); // ์ค๋ฆ์ฐจ์ ์ ๋ ฌ dfs(0); System.out.println(answer); } public static void dfs(int total) { if(total > N) return; // 657๋ณด๋ค ํฌ๋ฉด ๋ฐํ if(answer < total) answer = total; // ๋ต ๊ณ์ ๊ฐฑ์ for(int i = K-1; i >= 0; i--) { // ํฐ ์ซ์๋ถํฐ ํ์ // ๋ค์ ์๋ฆฟ์๋ฅผ ๋ถ์ dfs(total * 10 + arr[i]); // dfs(0)์ผ๋, // 0 * 10 + arr[2] = 7 --> dfs(7) // 0 * 10 + arr[1] = 5 --> dfs(5) // 0 * 10 + arr[0] = 1 --> dfs(1) // dfs(7)์ผ๋, // 7 * 10 + arr[2] = 77 --> dfs(77) // 7 * 10 + arr[1] = 75 --> dfs(75) // 7 * 10 + arr[0] = 71 --> dfs(71) // dfs(5)์ผ๋, // 5 * 10 + arr[2] = 57 --> dfs(57) // 5 * 10 + arr[1] = 55 --> dfs(55) // 5 * 10 + arr[0] = 51 --> dfs(51) // ... // dfs(77)์ผ๋, // 77 * 10 + arr[2] = 777 --> ๋ถ๊ฐ๋ฅ dfs ์ข ๋ฃ } } }
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ์ต๋๊ณต์ฝ์์ ์ต์๊ณต๋ฐฐ์ (0) 2024.10.28 [๋ฐฑ์ค/JAVA] 2231๋ฒ : ๋ถํดํฉ (0) 2024.10.28 [๋ฐฑ์ค/JAVA] 22864๋ฒ : ํผ๋ก๋ (0) 2024.10.26 [๋ฐฑ์ค/JAVA] 18312๋ฒ : ์๊ฐ (0) 2024.10.26 [๋ฐฑ์ค/JAVA] 11286๋ฒ : ์ ๋๊ฐ ํ (0) 2024.10.26