[programmers] ๋ฐฉ๋ฌธ ๊ธธ์ด - Java
๊ฒ์ ์บ๋ฆญํฐ๊ฐ ์ฃผ์ด์ง ๋ช
๋ น์ด์ ๋ฐ๋ผ ์ด๋ํ๋ฉฐ ์ฒ์ ๊ฑธ์ด๋ณธ ๊ธธ์ ๊ธธ์ด๋ฅผ ๊ณ์ฐํ๋ ๋ฌธ์ ์
๋๋ค. ์บ๋ฆญํฐ๋ ์ขํํ๋ฉด์ ๊ฒฝ๊ณ ๋ด์์๋ง ์ด๋ํ ์ ์์ผ๋ฉฐ, ์ด๋ ๊ฒฝ๋ก๋ Set์ ์ฌ์ฉํ์ฌ ์ ์ฅํ์ฌ ์ค๋ณต ๊ณ์ฐ์ ๋ฐฉ์งํฉ๋๋ค. ์ต์ข
์ ์ผ๋ก, ์ฒ์ ๋ฐฉ๋ฌธํ ๊ฒฝ๋ก์ ์๋ฅผ ๋ฐํํ๋ solution ํจ์๋ฅผ ๊ตฌํํฉ๋๋ค.
Sep 02, 2024
๋ฐฉ๋ฌธ ๊ธธ์ด
๋ฌธ์ ์ค๋ช
๊ฒ์ ์บ๋ฆญํฐ๋ฅผ 4๊ฐ์ง ๋ช
๋ น์ด๋ฅผ ํตํด ์์ง์ด๋ ค ํฉ๋๋ค. ๋ช
๋ น์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- U: ์์ชฝ์ผ๋ก ํ ์นธ ๊ฐ๊ธฐ
- D: ์๋์ชฝ์ผ๋ก ํ ์นธ ๊ฐ๊ธฐ
- R: ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ๊ฐ๊ธฐ
- L: ์ผ์ชฝ์ผ๋ก ํ ์นธ ๊ฐ๊ธฐ
์บ๋ฆญํฐ๋ ์ขํํ๋ฉด์ (0, 0) ์์น์์ ์์ํฉ๋๋ค. ์ขํํ๋ฉด์ ๊ฒฝ๊ณ๋ ์ผ์ชฝ ์(-5, 5), ์ผ์ชฝ ์๋(-5, -5), ์ค๋ฅธ์ชฝ ์(5, 5), ์ค๋ฅธ์ชฝ ์๋(5, -5)๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, "ULURRDLLU"๋ก ๋ช
๋ นํ๋ค๋ฉด
- 1๋ฒ ๋ช ๋ น์ด๋ถํฐ 7๋ฒ ๋ช ๋ น์ด๊น์ง ๋ค์๊ณผ ๊ฐ์ด ์์ง์ ๋๋ค.
- 8๋ฒ ๋ช ๋ น์ด๋ถํฐ 9๋ฒ ๋ช ๋ น์ด๊น์ง ๋ค์๊ณผ ๊ฐ์ด ์์ง์ ๋๋ค.
์ด๋, ์ฐ๋ฆฌ๋ ๊ฒ์ ์บ๋ฆญํฐ๊ฐ ์ง๋๊ฐ ๊ธธ ์ค ์บ๋ฆญํฐ๊ฐ ์ฒ์ ๊ฑธ์ด๋ณธ ๊ธธ์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ค๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์์ ์์์์ ๊ฒ์ ์บ๋ฆญํฐ๊ฐ ์์ง์ธ ๊ธธ์ด๋ 9์ด์ง๋ง, ์บ๋ฆญํฐ๊ฐ ์ฒ์ ๊ฑธ์ด๋ณธ ๊ธธ์ ๊ธธ์ด๋ 7์ด ๋ฉ๋๋ค. (8, 9๋ฒ ๋ช
๋ น์ด์์ ์์ง์ธ ๊ธธ์ 2, 3๋ฒ ๋ช
๋ น์ด์์ ์ด๋ฏธ ๊ฑฐ์ณ ๊ฐ ๊ธธ์
๋๋ค)
๋จ, ์ขํํ๋ฉด์ ๊ฒฝ๊ณ๋ฅผ ๋์ด๊ฐ๋ ๋ช
๋ น์ด๋ ๋ฌด์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, "LULLLLLLU"๋ก ๋ช
๋ นํ๋ค๋ฉด
- 1๋ฒ ๋ช ๋ น์ด๋ถํฐ 6๋ฒ ๋ช ๋ น์ด๋๋ก ์์ง์ธ ํ, 7, 8๋ฒ ๋ช ๋ น์ด๋ ๋ฌด์ํฉ๋๋ค. ๋ค์ 9๋ฒ ๋ช ๋ น์ด๋๋ก ์์ง์ ๋๋ค.
์ด๋ ์บ๋ฆญํฐ๊ฐ ์ฒ์ ๊ฑธ์ด๋ณธ ๊ธธ์ ๊ธธ์ด๋ 7์ด ๋ฉ๋๋ค.
๋ช
๋ น์ด๊ฐ ๋งค๊ฐ๋ณ์ dirs๋ก ์ฃผ์ด์ง ๋, ๊ฒ์ ์บ๋ฆญํฐ๊ฐ ์ฒ์ ๊ฑธ์ด๋ณธ ๊ธธ์ ๊ธธ์ด๋ฅผ ๊ตฌํ์ฌ return ํ๋ solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
์ ํ์ฌํญ
- dirs๋ stringํ์ผ๋ก ์ฃผ์ด์ง๋ฉฐ, 'U', 'D', 'R', 'L' ์ด์ธ์ ๋ฌธ์๋ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- dirs์ ๊ธธ์ด๋ 500 ์ดํ์ ์์ฐ์์ ๋๋ค.
์ ์ถ๋ ฅ ์
dirs | answer |
"ULURRDLLU" | 7 |
"LULLLLLLU" | 7 |
solution.java
import java.util.HashSet; import java.util.Set; class Solution { public int solution(String dirs) { // ์ฒ์ ๊ฑธ์ด๋ณธ ๊ฒฝ๋ก๋ฅผ ์ ์ฅํ๋ set Set<String> visitedPaths = new HashSet<>(); // ์์ ์์น int x = 0, y = 0; // ๊ฐ๊ฐ์ ์ด๋์ ๋ํ ๋ฐฉํฅ ๋งคํ for (char dir : dirs.toCharArray()) { int nx = x, ny = y; switch (dir) { case 'U': ny = y + 1; break; case 'D': ny = y - 1; break; case 'L': nx = x - 1; break; case 'R': nx = x + 1; break; } // ์ด๋ํ ์์น๊ฐ ๊ฒฝ๊ณ ๋ด์ ์๋์ง ํ์ธ if (nx < -5 || nx > 5 || ny < -5 || ny > 5) { continue; // ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋๋ ๊ฐ์ด๋ผ๋ฉด ๋ฌด์ } // ์์ชฝ ๋ฐฉํฅ์ผ๋ก ๊ฒฝ๋ก ์๋ณ์ ๋ง๋ค๊ธฐ String path1 = x + "," + y + "->" + nx + "," + ny; String path2 = nx + "," + ny + "->" + x + "," + y; // ์ ๊ฒฝ๋ก์ธ ๊ฒฝ์ฐ ๊ฒฝ๋ก ์ถ๊ฐ if (!visitedPaths.contains(path1) && !visitedPaths.contains(path2)) { visitedPaths.add(path1); visitedPaths.add(path2); } // ์ ์์น๋ก ์ด๋ x = nx; y = ny; } // ์ฒ์ ๊ฑธ์ด๋ณธ ๊ฒฝ๋ก์ ์ return visitedPaths.size() / 2; } }
ํต์ฌ ํค์๋
- ์บ๋ฆญํฐ์ ์์น๋ (-5, -5)์์ (5, 5) ๊ฒฝ๊ณ ๋ด์ ์์ด์ผ ํ๋ค. ์ด ๊ฒฝ๊ณ๋ฅผ ๋์ด์๋ ๋ชจ๋ ์์ง์์ ๋ฌด์๋์ด์ผ ํ๋ค.
- ๋ ์ขํ ์ฌ์ด์ ๊ฒฝ๋ก๋ฅผ ์ถ์ ํด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด (x1, y1)์์ (x2, y2)๋ก ์ด๋ํ๋ ๊ฒ์ด ์ฒ์์ด๋ผ๋ฉด ์ ๊ฒฝ๋ก๋ก ๊ฐ์ฃผ๋์ด์ผ ํ๋ค.
- ๋์ผํ ๊ฒฝ๋ก๋ฅผ ๋ ๋ฒ ๊ณ์ฐํด์๋ ์ ๋๋ฏ๋ก ์ฒ์ ๋ฐฉ๋ฌธํ ๊ฒฝ๋ก ์งํฉ์ ์ ์ฅํด์ผ ํ๋ค.
Set
์ ์ฌ์ฉํ์ฌ ๊ฐ ์ด๋์ ์์๊ณผ ๋์ ๋ํ๋ด๋ ์ ์์ผ๋ก ๊ฒฝ๋ก๋ฅผ ์ ์ฅํ๋ค. ์ฒ์ ๋ฐฉ๋ฌธํ ๊ฒฝ๋ก๋ฅผ ์ถ์ ํ๊ธฐ ์ํด ๊ฐ ๊ฒฝ๋ก๋ฅผx1,y1->x2,y2
์ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ํ๋ผ ์ ์๋ค.
๊ฒฐ๋ก !
ํด๋น ๋ฌธ์ ๋ฅผ ํ๋ฉด์
Set
์ ํ์ฉํด์ ์ง๋๊ฐ ๊ฒฝ๋ก๋ฅผ ์ ์ฅํด์ผ ํ๋ค๋ ๊ฒ์ ์์์ง๋ง, ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ์ฅ์ ํ ์ง์ ๋ํด์ ๊ณ ๋ฏผ์ด ํ์ํ๋ค. ๊ทธ ๊ฒฐ๊ณผ, String
์ผ๋ก ํ์ฌ ์์น์ ๋ชฉ์ ์ง๋ฅผ ๋ง๋ค์ด์ ์ ์ฅ์ ํ๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๋ ๊ฒ์ ์์๋ค.Share article