๋ฌธ์
๋ฌธ์ ์ค๋ช
๊ฒ์๊ฐ๋ฐ์์ธ ์ฃ ๋ฅด๋๋ ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ธฐ๊ณ๋ฅผ ๋ชจ๋ฐ์ผ ๊ฒ์์ผ๋ก ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค.์ฃ ๋ฅด๋๋ ๊ฒ์์ ์ฌ๋ฏธ๋ฅผ ๋์ด๊ธฐ ์ํด ํ๋ฉด ๊ตฌ์ฑ๊ณผ ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ด ๊ฒ์ ๋ก์ง์ ๋ฐ์ํ๋ ค๊ณ ํฉ๋๋ค.
๊ฒ์ ํ๋ฉด์ 1 x 1 ํฌ๊ธฐ์ ์นธ๋ค๋ก ์ด๋ฃจ์ด์ง N x N ํฌ๊ธฐ์ ์ ์ฌ๊ฐ ๊ฒฉ์์ด๋ฉฐ ์์ชฝ์๋ ํฌ๋ ์ธ์ด ์๊ณ ์ค๋ฅธ์ชฝ์๋ ๋ฐ๊ตฌ๋๊ฐ ์์ต๋๋ค. (์ ๊ทธ๋ฆผ์ 5 x 5 ํฌ๊ธฐ์ ์์์ ๋๋ค). ๊ฐ ๊ฒฉ์ ์นธ์๋ ๋ค์ํ ์ธํ์ด ๋ค์ด ์์ผ๋ฉฐ ์ธํ์ด ์๋ ์นธ์ ๋น์นธ์ ๋๋ค. ๋ชจ๋ ์ธํ์ 1 x 1 ํฌ๊ธฐ์ ๊ฒฉ์ ํ ์นธ์ ์ฐจ์งํ๋ฉฐ ๊ฒฉ์์ ๊ฐ์ฅ ์๋ ์นธ๋ถํฐ ์ฐจ๊ณก์ฐจ๊ณก ์์ฌ ์์ต๋๋ค. ๊ฒ์ ์ฌ์ฉ์๋ ํฌ๋ ์ธ์ ์ข์ฐ๋ก ์์ง์ฌ์ ๋ฉ์ถ ์์น์์ ๊ฐ์ฅ ์์ ์๋ ์ธํ์ ์ง์ด ์ฌ๋ฆด ์ ์์ต๋๋ค. ์ง์ด ์ฌ๋ฆฐ ์ธํ์ ๋ฐ๊ตฌ๋์ ์์ด๊ฒ ๋๋ ๋ฐ, ์ด๋ ๋ฐ๊ตฌ๋์ ๊ฐ์ฅ ์๋ ์นธ๋ถํฐ ์ธํ์ด ์์๋๋ก ์์ด๊ฒ ๋ฉ๋๋ค. ๋ค์ ๊ทธ๋ฆผ์ [1๋ฒ, 5๋ฒ, 3๋ฒ] ์์น์์ ์์๋๋ก ์ธํ์ ์ง์ด ์ฌ๋ ค ๋ฐ๊ตฌ๋์ ๋ด์ ๋ชจ์ต์ ๋๋ค.
๋ง์ฝ ๊ฐ์ ๋ชจ์์ ์ธํ ๋ ๊ฐ๊ฐ ๋ฐ๊ตฌ๋์ ์ฐ์ํด์ ์์ด๊ฒ ๋๋ฉด ๋ ์ธํ์ ํฐ๋จ๋ ค์ง๋ฉด์ ๋ฐ๊ตฌ๋์์ ์ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค. ์ ์ํ์์ ์ด์ด์ [5๋ฒ] ์์น์์ ์ธํ์ ์ง์ด ๋ฐ๊ตฌ๋์ ์์ผ๋ฉด ๊ฐ์ ๋ชจ์ ์ธํ ๋ ๊ฐ๊ฐ ์์ด์ง๋๋ค.
ํฌ๋ ์ธ ์๋ ์ ์ธํ์ด ์ง์ด์ง์ง ์๋ ๊ฒฝ์ฐ๋ ์์ผ๋ ๋ง์ฝ ์ธํ์ด ์๋ ๊ณณ์์ ํฌ๋ ์ธ์ ์๋์ํค๋ ๊ฒฝ์ฐ์๋ ์๋ฌด๋ฐ ์ผ๋ ์ผ์ด๋์ง ์์ต๋๋ค. ๋ํ ๋ฐ๊ตฌ๋๋ ๋ชจ๋ ์ธํ์ด ๋ค์ด๊ฐ ์ ์์ ๋งํผ ์ถฉ๋ถํ ํฌ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. (๊ทธ๋ฆผ์์๋ ํ๋ฉดํ์ ์ ์ฝ์ผ๋ก 5์นธ๋ง์ผ๋ก ํํํ์์)
๊ฒ์ ํ๋ฉด์ ๊ฒฉ์์ ์ํ๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด board์ ์ธํ์ ์ง๊ธฐ ์ํด ํฌ๋ ์ธ์ ์๋์ํจ ์์น๊ฐ ๋ด๊ธด ๋ฐฐ์ด moves๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ํฌ๋ ์ธ์ ๋ชจ๋ ์๋์ํจ ํ ํฐํธ๋ ค์ ธ ์ฌ๋ผ์ง ์ธํ์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
[์ ํ์ฌํญ]
-
board ๋ฐฐ์ด์ 2์ฐจ์ ๋ฐฐ์ด๋ก ํฌ๊ธฐ๋ ์ด์ ์ดํ์ ๋๋ค.
5 x 5
30 x 30
-
board์ ๊ฐ ์นธ์๋ 0 ์ด์ 100 ์ดํ์ธ ์ ์๊ฐ ๋ด๊ฒจ์์ต๋๋ค.
- 0์ ๋น ์นธ์ ๋ํ๋ ๋๋ค.
- 1 ~ 100์ ๊ฐ ์ซ์๋ ๊ฐ๊ธฐ ๋ค๋ฅธ ์ธํ์ ๋ชจ์์ ์๋ฏธํ๋ฉฐ ๊ฐ์ ์ซ์๋ ๊ฐ์ ๋ชจ์์ ์ธํ์ ๋ํ๋ ๋๋ค.
-
moves ๋ฐฐ์ด์ ํฌ๊ธฐ๋ 1 ์ด์ 1,000 ์ดํ์ ๋๋ค.
-
moves ๋ฐฐ์ด ๊ฐ ์์๋ค์ ๊ฐ์ 1 ์ด์์ด๋ฉฐ board ๋ฐฐ์ด์ ๊ฐ๋ก ํฌ๊ธฐ ์ดํ์ธ ์์ฐ์์ ๋๋ค.
์ ์ถ๋ ฅ ์
board | moves | result |
[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] | [1,5,3,5,1,2,1,4] | 4 |
์ ์ถ๋ ฅ ์์ ๋ํ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
์ธํ์ ์ฒ์ ์ํ๋ ๋ฌธ์ ์ ์ฃผ์ด์ง ์์์ ๊ฐ์ต๋๋ค. ํฌ๋ ์ธ์ด [1, 5, 3, 5, 1, 2, 1, 4] ๋ฒ ์์น์์ ์ฐจ๋ก๋๋ก ์ธํ์ ์ง์ด์ ๋ฐ๊ตฌ๋์ ์ฎ๊ฒจ ๋ด์ ํ, ์ํ๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ผ๋ฉฐ ๋ฐ๊ตฌ๋์ ๋ด๋ ๊ณผ์ ์์ ํฐํธ๋ ค์ ธ ์ฌ๋ผ์ง ์ธํ์ 4๊ฐ ์ ๋๋ค.
ํ์ด
์ค๋ช
- ํด๋น ๋ฌธ์ ๋ 2์ฐจ์ ๋ฐฐ์ด์ ํ์ ๊ธฐ์ค์ผ๋ก ์๋จ์ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ฅผ
Stack
์ ๋ด์์ ๋ชจ๋ ์ด๋์ ์ํํ์ ๋Stack
์ ๋จ์ ๋ฐ์ดํฐ์ ๊ฐ์(Stack.size()
)๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ด๋ค. - ํ๋ฒ ์์ง์ผ ๋, ํ์ฌ์ ์์ง์์ ์์นํ ํ์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ
Stack
์ด ๋น์ด์๊ฑฐ๋Stack.peek()
๊ณผ ๋น๊ตํ์ ๋ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐStack.push()
๋ฅผ ์งํํ๋ค.
์ฝ๋
package ์ฌ์ฑํ.์๊ณ ๋ฆฌ์ฆ_6์ฃผ์ฐจ;
import java.util.*;
public class ํฌ๋ ์ธ์ธํ๋ฝ๊ธฐ๊ฒ์_ํ๋ก๊ทธ๋๋จธ์ค {
public static void main(String[] args) {
int[][] answer = { { 0, 0, 0, 0, 0 }, { 0, 0, 1, 0, 3 }, { 0, 2, 5, 0, 1 }, { 4, 2, 4, 4, 2 },
{ 3, 5, 1, 3, 1 } };
int[] moves = { 1, 5, 3, 5, 1, 2, 1, 4 };
System.out.println();
int result = solution(answer, moves);
System.out.println(result);
}
public static int solution(int[][] board, int[] moves) {
Stack<Integer> stack = new Stack<Integer>();
int answer = 0;
// moves์ ๋ฐ์ดํฐ๋ ์ธํ์ด ์์ฌ์๋ board์ ์ธ๋ก์ถ ์ธ๋ฑ์ค ๋ฒํธ
// moves์ ๊ธธ์ด๋งํผ ๋ฐ๋ณต
for (int i = 0; i < moves.length; i++) {
// ํ์ฌ board์ ์ธ๋ก์ถ ๊ธธ์ด๋งํผ ๋ฐ๋ณต
for (int k = 0; k < board.length; k++) {
// ๋ง์ฝ board์ ์ธ๋ก์ถ์ 0์ด ์๋ ๊ฒฝ์ฐ๋ ๊ฐ์ฅ ์์ ์๋ ์ธํ์ด๋ฏ๋ก
// ๋ฐ๊ตฌ๋์ ์์ ์ค๋น๋ฅผ ํ๋ค.
if (board[k][moves[i] - 1] != 0) {
int tmp = board[k][moves[i] - 1];
// ๋ง์ฝ ๋ฐ๊ตฌ๋๊ฐ ๋น์ด ์๊ฑฐ๋ ๋ฐ๊ตฌ๋์ ์ ์ผ ์์ ์์ธ ์ธํ๊ณผ board์ ํ์ฌ ์ธํ์ด ๋ค๋ฅด๋ค๋ฉด
if (stack.isEmpty() || stack.peek() != tmp) {
// ๋ฐ๊ตฌ๋์ board ์ธํ ๋ฃ๊ธฐ
stack.push(board[k][moves[i] - 1]);
// ๋ง์ฝ ๋ฐ๊ตฌ๋์ ์ ์ผ ์์ ์์ธ ์ธํ๊ณผ board์ ํ์ฌ ์ธํ๊ณผ ๊ฐ๋ค๋ฉด
} else if (stack.peek() == tmp) {
// ๋ฐ๊ตฌ๋์ ์ธํ ์ญ์
stack.pop();
answer++;
}
// ํ์ฌ ๊ฒ์ฌํ ์ธํ์ ์๋ฆฌ๋ ๋บ๋ค.
board[k][moves[i] - 1] = 0;
break;
}
}
}
return answer * 2;
}
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค | 3์ง๋ฒ ๋ค์ง๊ธฐ (0) | 2020.12.17 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค | ์ฒด์ก๋ณต, ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ (2) | 2020.12.12 |
ํ๋ก๊ทธ๋๋จธ์ค | ๋ ๊ฐ ๋ฝ์์ ๋ํ๊ธฐ, ์์ ํ์, HashSet (0) | 2020.12.11 |
Cos Pro 1๊ธ | ๋น์์ด ์ด๋ ๊ฐ๋ฅํ ์นธ ๊ฐ์ ์ฐพ๊ธฐ (0) | 2020.12.10 |
Cos Pro 1๊ธ | ๋ฌธ์์ด ํฉ์ฑํ๊ธฐ, ์์ ํ์ (0) | 2020.12.10 |