๋ฌธ์ ์ค๋ช
https://school.programmers.co.kr/learn/courses/30/lessons/154538
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก์ Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
์์ฐ์ x๋ฅผ y๋ก ๋ณํํ๋ ค๊ณ ํฉ๋๋ค. ์ฌ์ฉํ ์ ์๋ ์ฐ์ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- x์ n์ ๋ํฉ๋๋ค
- x์ 2๋ฅผ ๊ณฑํฉ๋๋ค.
- x์ 3์ ๊ณฑํฉ๋๋ค.
์์ฐ์ x, y, n์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, x๋ฅผ y๋ก ๋ณํํ๊ธฐ ์ํด ํ์ํ ์ต์ ์ฐ์ฐ ํ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์. ์ด๋ x๋ฅผ y๋ก ๋ง๋ค ์ ์๋ค๋ฉด -1์ return ํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- 1 ≤ x ≤ y ≤ 1,000,000
- 1 ≤ n < y
์ ์ถ๋ ฅ ์
| x | y | n | result |
| 10 | 40 | 5 | 2 |
| 10 | 40 | 30 | 1 |
| 2 | 5 | 4 | -1 |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
- x์ 2๋ฅผ 2๋ฒ ๊ณฑํ๋ฉด 40์ด ๋๊ณ ์ด๋๊ฐ ์ต์ ํ์์ ๋๋ค.
์ ์ถ๋ ฅ ์ #2
- x์ n์ธ 30์ 1๋ฒ ๋ํ๋ฉด 40์ด ๋๊ณ ์ด๋๊ฐ ์ต์ ํ์์ ๋๋ค.
์ ์ถ๋ ฅ ์ #3
- x๋ฅผ y๋ก ๋ณํํ ์ ์๊ธฐ ๋๋ฌธ์ -1์ returnํฉ๋๋ค.
๋ด๊ฐ ์์ฑํ ์ฝ๋
import java.util.*;
class Solution {
public int solution(int x, int y, int n) {
// ์ฐ์ฐ๊ฐ๊ณผ ์ฐ์ฐ ํ์๋ฅผ ์ ์ฅํ Queue ์์ฑ
Queue<int[]> queue = new LinkedList<>();
// ์ฐ์ฐ๊ฐ์ ์ค๋ณต์ ๋ฐฉ์งํ boolean ๋ฐฐ์ด ์์ฑ, y๋ฅผ ๋๋ ์ซ์๋ ํ์ธํ ํ์๊ฐ ์์
boolean[] visited = new boolean[y + 1];
// [ํ์ฌ ์ซ์, ์ฐ์ฐ ํ์]
queue.add(new int[]{x, 0});
visited[x] = true;
// ์ฐ์ฐ ๋ฐ๋ณต ์งํ
while(!queue.isEmpty()) {
int[] now = queue.poll();
// ํ์ฌ ์ซ์
int num = now[0];
// ์ฐ์ฐ ํ์
int count = now[1];
// ๋ชฉํ ์ซ์ ๋๋ฌ ์ ์ข
๋ฃ
if (num == y) {
return count;
}
// ๋ค์ ๋จ๊ณ ๊ฐ๋ฅํ ์ฐ์ฐ๋ค
int[] next = {num + n, num * 2, num * 3};
for (int nxt : next) {
// y๋ฅผ ๋์ง ์๊ณ ๋ฐฉ๋ฌธํ์ง ์์ ๊ฒฝ์ฐ๋ง ํ์ ์งํ
if (nxt <= y && !visited[nxt]) {
visited[nxt] = true;
queue.add(new int[]{nxt, count + 1});
}
}
}
// y์ ๋๋ฌ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ -1
return -1;
}
}
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ์๊ฐํ ๋ฐฉํฅ
์ฒ์ ๋ฌธ์ ๋ฅผ ๋ดค์ ๋, ์ฃผ์ด์ง ์ ์ x๋ฅผ ์์์ผ๋ก +n, *2, *3 ์ธ ๊ฐ์ง ์ฐ์ฐ์ ํตํด ๋ชฉํ ์ซ์ y๋ฅผ ๋ง๋๋ ์ต์ ์ฐ์ฐ ํ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๋ผ๋ ์ ์ ํ์ ํ๋ค. ์ฒ์์๋ y์์ x๋ก ๊ฑฐ๊พธ๋ก ์ค์ฌ๊ฐ๋ ๋ฐฉ์์ผ๋ก ์ ๊ทผํด๋ณด๋ ค ํ๋ค. ์๋ฅผ ๋ค์ด y์์ n์ ๋นผ๊ฑฐ๋, 2 ๋๋ 3์ผ๋ก ๋๋๋ฉด์ x๊ฐ ๋ ์ ์๋์ง ํ์ธํ๋ ์์ด๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ์ญ๋ฐฉํฅ์ผ๋ก ํ์ํ๋ฉด ๊ฒฝ์ฐ์ ์๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ๋์ด๋๊ณ , ๋๋์ด ๋จ์ด์ง์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๋งํ๋ ์ง์ ์ด ์๊ธฐ๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์ ์ด๋ผ๊ณ ํ๋จํ๋ค.
์ด์ ๋ฐํด x์์ y๋ก ๊ฐ๋ ์ ๋ฐฉํฅ ํ์์ ์ฐ์ฐ์ด ๋จ์ํ๊ณ , “์ต์ ์ฐ์ฐ ํ์”๋ฅผ ์ฐพ๋ ๋ฐ ์ ํฉํ๋ค๊ณ ์๊ฐํ๋ค. ํนํ BFS(๋๋น ์ฐ์ ํ์)๋ฅผ ์ฌ์ฉํ๋ฉด, ํ ๋จ๊ณ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์ฐ์ฐ์ ํ์ํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ๋จผ์ y์ ๋๋ฌํ๋ ์๊ฐ์ด ๊ณง ์ต์ ํ์๋ผ๋ ์ ์์ ํจ์จ์ ์ด๋ค.
๊ตฌํ์ Queue๋ฅผ ์ฌ์ฉํ์ฌ (ํ์ฌ ์ซ์, ์ฐ์ฐ ํ์) ํํ๋ก ์ ์ฅํ๊ณ , ๋งค ๋จ๊ณ๋ง๋ค +n, *2, *3์ ์ํํด ์๋ก์ด ์ซ์๋ฅผ ํ์ ๋ฃ์๋ค. ์ด๋ฏธ ๋ฐฉ๋ฌธํ ์ซ์๋ boolean[] visited๋ก ๊ด๋ฆฌํ์ฌ ์ค๋ณต ํ์์ ๋ง์๋ค. ๋ํ, ํ์ ๋์ค num == y๊ฐ ๋๋ ์๊ฐ ๋ฐ๋ก return count;๋ก ์ข ๋ฃํด ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋๋ก ํ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ด ๋ฌธ์ ๋ ๋จ์ํ ์์ ๊ณ์ฐ์ด ์๋๋ผ, ๊ฐ๋ฅํ ์ฐ์ฐ ๊ฒฝ๋ก ์ค ์ต์ ์ด๋ ํ์๋ฅผ ์ฐพ๋ ๊ทธ๋ํ ํ์ ๋ฌธ์ ๋ก ์ ๊ทผํด์ผ ํ๋ฉฐ, BFS๋ฅผ ํตํด ํจ์จ์ ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค๋ ์ ์ด ํต์ฌ์ด์๋ค.
'๐ฆ ํ๋ก๊ทธ๋๋จธ์ค > ๐๏ธ ์๊ณ ๋ฆฌ์ฆ ํ์ด(Java)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ์ฑ๊ฒฉ ์ ํ ๊ฒ์ฌํ๊ธฐ (0) | 2025.10.23 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ๋์ถฉ ๋ง๋ ์ํ (0) | 2025.10.20 |
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ์ฃผ์ฐจ ์๊ธ ๊ณ์ฐ (0) | 2025.10.17 |
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ํ๋ฐฐ์์ (0) | 2025.10.16 |
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ๋ ๋ฐ๋จน๊ธฐ (0) | 2025.10.13 |