[ํ๋ก๊ทธ๋๋จธ์ค-49190] ๋ฐฉ์ ๊ฐ์
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก์ Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๋ฌธ์ ์ค๋ช
๋ฐฉ์ ๊ฐ์ ๊ตฌํ๊ธฐ(๊ทธ๋ฆผ์ ๊ทธ๋ฆด ๋ ์ฌ๋ฐฉ์ด ๋งํ๋ฉด ๋ฐฉํ๋๋ก ๊ฐ์ฃผ)

์ ์ถ๋ ฅ ์์
| arrows | result |
| [6, 6, 6, 4, 4, 4, 2, 2, 2, 0, 0, 0, 1, 6, 5, 5, 3, 6, 0] | 3 |
ํ์ด ๋ฐฉ๋ฒ(๋ค๋ฅธ ํ์ด ์ฐธ๊ณ ํจ)
์ฐ์ ๋ฐฉ์ ์์ฑ ์กฐ๊ฑด์ ๋ถ์ํ๋ฉด, ์ด๋ฏธ ๋ฐฉ๋ฌธํ ์ ์ ์ ๋ค์ ๋ฐฉ๋ฌธํ๋ ๊ฒฝ์ฐ ํ๋์ ๋ฐฉ์ด ์์ฑ๋๋ค.

ํ์ง๋ง, ์๋์ ๊ฐ์ด ์ด๋ฏธ ๋ฐฉ๋ฌธํ ์ ์ ์ด์ง๋ง ์ด๋ฏธ ์ง๋์จ ๊ฐ์ ์ ํตํด ์ค๋ ๊ฒฝ์ฐ๋ ๋ฐฉ์ ์์ฑ ์กฐ๊ฑด์ ํด๋น๋์ง ์๋๋ค.

์ฆ, ๋ฐฉ์ ์์ฑ ์กฐ๊ฑด์ ์๋ 2๊ฐ์ง๋ฅผ ๋ชจ๋ ๋ง์กฑํด์ผ ํ๋ค.
- ์ด๋ฏธ ๋ฐฉ๋ฌธํ ์ ์ ์ ๋ค์ ๋ฐฉ๋ฌธํ๋ ๊ฒฝ์ฐ
- ๋ฐฉ๋ฌธํ๋ ๊ฐ์ ์ด ์ฒ์ ์ค๋ ๊ฐ์ ์ธ ๊ฒฝ์ฐ
๋ ํ๋ ๊ณ ๋ คํด์ผ ํ๋ ์ ์ด ๋๊ฐ์ ๋ฐฉํฅ์ผ๋ก๋ ์ด๋ ๊ฐ๋ฅํ๋ค๋ ์ ์ด๋ค.

์ด ๋ถ๋ถ์ ๊ณ ๋ คํด, ๊ทธ๋ํ๋ฅผ 2๋ฐฐ๋ก ๋ํ ๊ฒน์น๋ ๋ถ๋ถ์ด ๋ฐ์ํ์ง ์๋๋ก ํ ์ ์์

ํท๊ฐ๋ ธ๋ ๋ถ๋ถ,,
์๋ฅผ ๋ค์ด arrows = [6, 6, 6, 4, 4, 4, 2, 2, 2, 0, 0, 0, 1, 6, 5, 6, 6, 4, 2, 2, 2, 0]์ธ ๊ฒฝ์ฐ, ์ด๋ฏธ ๋ฐฉ๋ฌธํ ์ ์ & ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๊ฒฝ๋ก๋ ๋ฐฉ์ ๊ฐ์์ ์นด์ดํธ๊ฐ ๋์ง ์๋๋ฐ ์ด ์์ ๋ก ํ๊ฒ ๋๋ฉด ๋ฐฉ์ ์ต์ข ์ ์ผ๋ก 2๊ฐ๊ฐ ์๊ธฐ๋๊ฒ ์๋๊น?(์ค์ ๋ก๋ ๋ฐฉ 3๊ฐ ์์ฑ)
๋ผ๊ณ ์๊ฐํจ

๋ง์ง๋ง 0 ๋ฐฉํฅ์ผ๋ก ํ์ ๋ ์ธ ๋ฒ์งธ ๋ฐฉ์ด ์์ฑ๋๋ ๊ฒ์ด ์๋๋ผ, 21๋ฒ์งธ ์ธ๋ฑ์ค์ ์๋ 2 ๋ฐฉํฅ๋ ์ธ ๋ฒ์งธ ๋ฐฉ์ด ์์ฑ๋๋ ๊ฒ!
์ฝ๋
import java.util.*;
class Solution {
static int[][] directions = {
{0, 1}, // 0
{1, 1}, // 1
{1, 0}, // 2
{1, -1}, // 3
{0, -1}, // 4
{-1, -1}, // 5
{-1, 0}, // 6
{-1, 1} // 7
};
public int solution(int[] arrows) {
int answer = 0;
// ์ ์ ๋ฐฉ๋ฌธ ์ฌ๋ถ ํ์ธ์ ์ํ ํด์Set ์ด์ฉ
Set<String> visitedNode = new HashSet<>();
// ๊ฐ์ ๋ฐฉ๋ฌธ ์ฌ๋ถ ํ์ธ์ ์ํ ํด์Set ์ด์ฉ
Set<String> visitedEdge = new HashSet<>();
int currentX = 0;
int currentY = 0;
// ์์ ์์น(0, 0) ์ ์ ๋ฐฉ๋ฌธ ํ์
visitedNode.add(String.format("%d/%d", currentX, currentY));
for(int arrow : arrows) {
// ๊ทธ๋ํ๋ฅผ 2๋ฐฐ๋ก ์ค์ผ์ผ์
(๋๊ฐ์ ์ด๋ ๊ฒฝ๋ก๋ฅผ ์ํด)
for(int i=0; i<2; i++) {
int nextX = currentX + directions[arrow][0];
int nextY = currentY + directions[arrow][1];
String nextNode = String.format("%d/%d", nextX, nextY);
String currentToNext = String.format("%d/%d/%d/%d", currentX, currentY, nextX, nextY);
// ์ด๋ฏธ ๋ฐฉ๋ฌธํ ์ ์ ์ด๋ฉด์, ์๋ก์ด ๊ฐ์ ์ผ๋ก ์ด๋ํ ๊ฒฝ์ฐ => ๋ฐฉ ํ๋ ์์ฑ
if(visitedNode.contains(nextNode)
&& !visitedEdge.contains(currentToNext)){
answer++; // ๋ฐฉ ์์ฑ
}
visitedNode.add(nextNode); // ๋ค์ ์ด๋ ์ขํ ๋ฐฉ๋ฌธ ํ์
visitedEdge.add(currentToNext); // ํ์ฌ ์์น -> ๋ค์ ์์น ๊ฒฝ๋ก ํ์
String nextToCurrent = String.format("%d/%d/%d/%d", nextX, nextY, currentX, currentY); // ๋ฐ๋ ์ด๋ ๊ฒฝ๋ก์ธ ๋ค์ ์์น -> ํ์ฌ ์์น ๊ฒฝ๋ก ํ์
visitedEdge.add(nextToCurrent);
currentX = nextX;
currentY = nextY;
}
}
return answer;
}
}
์ฐธ๊ณ ์ฌ์ดํธ
https://yabmoons.tistory.com/606
[ ํ๋ก๊ทธ๋๋จธ์ค ๋ฐฉ์ ๊ฐ์ (Lv5) ] (C++)
ํ๋ก๊ทธ๋๋จธ์ค์ ๋ฐฉ์ ๊ฐฏ์(Lv5) ๋ฌธ์ ์ด๋ค. [ ๋ฌธ์ ํ์ด ]์ฃผ์ด์ง ๋ฐฉํฅ๋๋ก ์ ์ ๊ทธ์์ ๋, ๋ง๋ค์ด ์ง ๋ฐฉ์ ๊ฐฏ์๋ฅผ return ํด์ผ ํ๋ ๋ฌธ์ ์ด๋ค.์๊ฐ๋ณด๋ค ๋ฌธ์ ๊ฐ ๋จ์ํด ๋ณด์ด์ง๋ง, ๋ณด์ด์ง ์๋ ํจ์ ๊ฐ
yabmoons.tistory.com