2023. 10. 27. 14:23ใ์ธํ๋ฐ/์๋ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์ ๋ฌธ : ์ฝ๋ฉํ ์คํธ ๋๋น
https://hyejin.tistory.com/1233
-> ์ด์ ๋ฌธ์ ํ์ด
3. ํฌ๋ ์ธ ์ธํ ๋ฝ๊ธฐ
์ค๋ช
๊ฒ์๊ฐ๋ฐ์์ธ ์ฃ ๋ฅด๋๋ ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ธฐ๊ณ๋ฅผ ๋ชจ๋ฐ์ผ ๊ฒ์์ผ๋ก ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค.
์ฃ ๋ฅด๋๋ ๊ฒ์์ ์ฌ๋ฏธ๋ฅผ ๋์ด๊ธฐ ์ํด ํ๋ฉด ๊ตฌ์ฑ๊ณผ ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ด ๊ฒ์ ๋ก์ง์ ๋ฐ์ํ๋ ค๊ณ ํฉ๋๋ค.
๊ฒ์ ํ๋ฉด์ 1 x 1 ํฌ๊ธฐ์ ์นธ๋ค๋ก ์ด๋ฃจ์ด์ง N x N ํฌ๊ธฐ์ ์ ์ฌ๊ฐ ๊ฒฉ์์ด๋ฉฐ ์์ชฝ์๋ ํฌ๋ ์ธ์ด ์๊ณ ์ค๋ฅธ์ชฝ์๋ ๋ฐ๊ตฌ๋๊ฐ ์์ต๋๋ค.
(์ ๊ทธ๋ฆผ์ 5 x 5 ํฌ๊ธฐ์ ์์์ ๋๋ค). ๊ฐ ๊ฒฉ์ ์นธ์๋ ๋ค์ํ ์ธํ์ด ๋ค์ด ์์ผ๋ฉฐ ์ธํ์ด ์๋ ์นธ์ ๋น์นธ์ ๋๋ค.
๋ชจ๋ ์ธํ์ 1 x 1 ํฌ๊ธฐ์ ๊ฒฉ์ ํ ์นธ์ ์ฐจ์งํ๋ฉฐ ๊ฒฉ์์ ๊ฐ์ฅ ์๋ ์นธ๋ถํฐ ์ฐจ๊ณก์ฐจ๊ณก ์์ฌ ์์ต๋๋ค.
๊ฒ์ ์ฌ์ฉ์๋ ํฌ๋ ์ธ์ ์ข์ฐ๋ก ์์ง์ฌ์ ๋ฉ์ถ ์์น์์ ๊ฐ์ฅ ์์ ์๋ ์ธํ์ ์ง์ด ์ฌ๋ฆด ์ ์์ต๋๋ค. ์ง์ด ์ฌ๋ฆฐ ์ธํ์ ๋ฐ๊ตฌ๋์ ์์ด๊ฒ ๋๋ ๋ฐ,
์ด๋ ๋ฐ๊ตฌ๋์ ๊ฐ์ฅ ์๋ ์นธ๋ถํฐ ์ธํ์ด ์์๋๋ก ์์ด๊ฒ ๋ฉ๋๋ค.
๋ค์ ๊ทธ๋ฆผ์ [1๋ฒ, 5๋ฒ, 3๋ฒ] ์์น์์ ์์๋๋ก ์ธํ์ ์ง์ด ์ฌ๋ ค ๋ฐ๊ตฌ๋์ ๋ด์ ๋ชจ์ต์ ๋๋ค.
๋ง์ฝ ๊ฐ์ ๋ชจ์์ ์ธํ ๋ ๊ฐ๊ฐ ๋ฐ๊ตฌ๋์ ์ฐ์ํด์ ์์ด๊ฒ ๋๋ฉด ๋ ์ธํ์ ํฐ๋จ๋ ค์ง๋ฉด์ ๋ฐ๊ตฌ๋์์ ์ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค.
์ ์ํ์์ ์ด์ด์ [5๋ฒ] ์์น์์ ์ธํ์ ์ง์ด ๋ฐ๊ตฌ๋์ ์์ผ๋ฉด ๊ฐ์ ๋ชจ์ ์ธํ ๋ ๊ฐ๊ฐ ์์ด์ง๋๋ค.
ํฌ๋ ์ธ ์๋ ์ ์ธํ์ด ์ง์ด์ง์ง ์๋ ๊ฒฝ์ฐ๋ ์์ผ๋ ๋ง์ฝ ์ธํ์ด ์๋ ๊ณณ์์ ํฌ๋ ์ธ์ ์๋์ํค๋ ๊ฒฝ์ฐ์๋ ์๋ฌด๋ฐ ์ผ๋ ์ผ์ด๋์ง ์์ต๋๋ค.
๋ํ ๋ฐ๊ตฌ๋๋ ๋ชจ๋ ์ธํ์ด ๋ค์ด๊ฐ ์ ์์ ๋งํผ ์ถฉ๋ถํ ํฌ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. (๊ทธ๋ฆผ์์๋ ํ๋ฉดํ์ ์ ์ฝ์ผ๋ก 5์นธ๋ง์ผ๋ก ํํํ์์)
๊ฒ์ ํ๋ฉด์ ๊ฒฉ์์ ์ํ๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด board์ ์ธํ์ ์ง๊ธฐ ์ํด ํฌ๋ ์ธ์ ์๋์ํจ ์์น๊ฐ ๋ด๊ธด ๋ฐฐ์ด moves๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋,
ํฌ๋ ์ธ์ ๋ชจ๋ ์๋์ํจ ํ ํฐํธ๋ ค์ ธ ์ฌ๋ผ์ง ์ธํ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์.
์ ๋ ฅ
์ฒซ ์ค์ ์์ฐ์ N(5<=N<=30)์ด ์ฃผ์ด์ง๋๋ค.
๋ ๋ฒ์งธ ์ค๋ถํฐ N*N board ๋ฐฐ์ด์ด ์ฃผ์ด์ง๋๋ค.
board์ ๊ฐ ์นธ์๋ 0 ์ด์ 100 ์ดํ์ธ ์ ์๊ฐ ๋ด๊ฒจ์์ต๋๋ค.
0์ ๋น ์นธ์ ๋ํ๋ ๋๋ค.
1 ~ 100์ ๊ฐ ์ซ์๋ ๊ฐ๊ธฐ ๋ค๋ฅธ ์ธํ์ ๋ชจ์์ ์๋ฏธํ๋ฉฐ ๊ฐ์ ์ซ์๋ ๊ฐ์ ๋ชจ์์ ์ธํ์ ๋ํ๋ ๋๋ค.
board๋ฐฐ์ด์ด ๋๋ ๋ค์์ค์ moves ๋ฐฐ์ด์ ๊ธธ์ด M์ด ์ฃผ์ด์ง๋๋ค.
๋ง์ง๋ง ์ค์๋ moves ๋ฐฐ์ด์ด ์ฃผ์ด์ง๋๋ค.
moves ๋ฐฐ์ด์ ํฌ๊ธฐ๋ 1 ์ด์ 1,000 ์ดํ์ ๋๋ค.
moves ๋ฐฐ์ด ๊ฐ ์์๋ค์ ๊ฐ์ 1 ์ด์์ด๋ฉฐ board ๋ฐฐ์ด์ ๊ฐ๋ก ํฌ๊ธฐ ์ดํ์ธ ์์ฐ์์ ๋๋ค.
์ถ๋ ฅ
์ฒซ ์ค์ ํฐํธ๋ ค์ ธ ์ฌ๋ผ์ง ์ธํ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
์์ ์ ๋ ฅ 1
5
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
8
1 5 3 5 1 2 1 4
์์ ์ถ๋ ฅ 1
4
๋ฌธ์ ํ์ด 1
public int solution(int n, int[][] board, int m, int[] moves)
{
int answer = 0;
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (board[j][moves[i] - 1] != 0)
{
if (!stack.isEmpty()) {
if (stack.peek() == board[j][moves[i] - 1]) {
stack.pop();
answer += 2;
}else
{
stack.push(board[j][moves[i] - 1]);
}
}else {
stack.push(board[j][moves[i] - 1]);
}
board[j][moves[i] - 1] = 0;
break;
}
}
}
return answer;
}
๐ฉ๐ป : ์ด ๋ฌธ์ ๋ ์ญ์ ํ๋ก๊ทธ๋๋จธ์ค์์ ํ์ด๋ดค๋ ์ ์ด ์๋ ๋ฌธ์ ์ด๋ค. ๋ฌผ๋ก ์ด๋ป๊ฒ ํ์๋์ง ๊ธฐ์ต์ด ๊ฐ๋ฌผ๊ฐ๋ฌผํด์ ๋ค์ ํ์ด๋ณด์! ๋ผ๋ ๋ง์ธ๋๋ก ๋ค์ ํ์๋ค.
n x n board ๋ฐฐ์ด์ด ํ๋ ์ฃผ์ด์ง๊ณ , ๊ทธ ๋ค์ ํฌ๋ ์ธ์ด ์์ง์ด๋ ์์น๋ฅผ ์ ์ฅํ moves ๋ฐฐ์ด์ด ์ฃผ์ด์ง๋ค.
๊ทธ ๋ค์ ์ธํ์ ๋ฝ์์ ๋ด์ ๊ณต๊ฐ์ด ํ์ํ๋ฐ ์ด ๊ณต๊ฐ์ Stack์ผ๋ก ๋ง๋ค๋ฉด ๋๋ค.
์ด์ค for๋ฌธ์ ์ด์ฉํด์ ์ฒซ๋ฒ์งธ for๋ฌธ๋ moves ๋ฐฐ์ด ๊ธธ์ด๋งํผ ๋๊ณ , ๋๋ฒ์งธ for๋ฌธ์ board์ ๊ธธ์ด๋งํผ ๋๋ฉด ๋๋ค.
board[j][moves[i-1]] ๋ก ๊ตฌํ๋ฉด ๋๋๋ฐ move๋ฐฐ์ด์ ์ ์ฅ๋ ํฌ๋ ์ธ์ด ์์ง์ด๋ ์์น๋ 1๋ถํฐ ์์ํ๊ณ ์๊ธฐ ๋๋ฌธ์ -1์ ํด์ค์ผ ํ๋ค.
if (!stack.isEmpty()) {
if (stack.peek() == board[j][moves[i] - 1]) {
stack.pop();
answer += 2;
}else
{
stack.push(board[j][moves[i] - 1]);
}
}
๊ทธ board[j][moves[i-1]] ์ด ๊ฐ์ด 0์ด ์๋๋ฉด ์ธํ์ ๋ฝ์์ stack์ pushํ๋ฉด ๋๋๋ฐ ์ด๋ stack์ด ๋น์ด์์ง์์ ๋๋ stack์ peek ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๋งจ ์์ ๊ฐ๊ณผ ๋น๊ตํด์ ๊ฐ์ผ๋ฉด ๊ทธ๋ฅ push ํ์ง๋ง๊ณ pop ํด์ ๊ทธ ๊ฐ์ ๊บผ๋ด์ฃผ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ answer์๋ +2๋ฅผ ํด์ฃผ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ stack์ด ๋น์ด์์ ๋ ํน์ ๋น์ด์์ง ์์๋ฐ peekํ ๊ฐ๊ณผ ๋ค๋ฅด๋ฉด ๊ทธ๋ stack์ push ํด์ฃผ๋ฉด ๋๋ค.
board[j][moves[i] - 1] = 0;
break;
๊ทธ ๋ค์์ ์ธํ์ ๋ฝ์ stack์ ๋ฃ์๊ธฐ ๋๋ฌธ์ board[j][moves[i-1]] ์ ๊ฐ์ 0์ผ๋ก ๋ณ๊ฒฝํด์ฃผ๊ณ , break ํด์ผ ํ๋ค.
break ์ํ๋ฉด ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์ ๋ค์ ์ธํ์ ๋ ๋ฝ๊ธฐ ๋๋ฌธ์ break ํด์ค์ผ ํ๋ค!
๊ทธ๋ฆฌ๊ณ answer ๊ฐ์ ๋ฆฌํดํ๋ฉด ๋๋ค.
๋ฌธ์ ํ์ด 2
public int solution2(int[][] board, int[] moves)
{
int answer = 0;
Stack<Integer> stack = new Stack<>();
for (int pos : moves)
{
for (int i = 0; i< board.length; i++)
{
if (board[i][pos - 1] != 0) {
int tmp = board[i][pos - 1];
board[i][pos-1] = 0;
if (!stack.isEmpty() && tmp == stack.peek())
{
answer += 2;
stack.pop();
}else {
stack.push(tmp);
}
break;
}
}
}
return answer;
}
๐พ : ๊ฐ์ฌ๋๋ ๋๋ ๋์ผํ๊ฒ ํ์๋๋ฐ, board[j][pos[i-1]] ๊ฐ์ด 0์ด ์๋๋ผ๋ฉด tmp ๋ณ์๋ฅผ ํ๋ ๋ง๋ค์ด์ board[j][pos[i-1]] ๊ฐ์ ์ ์ฅํด๋๊ณ , board[j][pos[i-1]]๋ 0 ๊ฐ์ ์ ์ฅํ๋ค.
๊ทธ ๋ค์ stack์ด ๋น์ด์์ง ์์ผ๋ฉด์, stack peekํ ๊ฐ์ด board[j][pos[i-1]]์ ๊ฐ๋ค๋ฉด stack์์ pop ํด์ฃผ๊ณ , answer ์ +2๋ฅผ ํด์ค๋ค.
stack์ด ๋น์ด์๊ฑฐ๋ ํน์ board[j][pos[i-1]]์ ๊ฐ์ด peekํ ๊ฐ๊ณผ ๊ฐ์ง ์๋ค๋ฉด stack์ push ํด์ฃผ๊ณ , break ํ๋ฉด ๋๋ค.
(๋๋ ์กฐ๊ฑด๋ฌธ์ ๋๋ ์ ํ๋๋ผ๊ณ ์ค๋ณต ์ฝ๋๊ฐ ์๊ฒผ๋ ๊ฒ์ด๋ฏ๋ก ๊ฐ์ฌ๋์ฒ๋ผ ํ๋ฉด ์ฝ๋๋ฅผ ์ค์ผ ์ ์๋ค!)