반응형
https://programmers.co.kr/learn/courses/30/lessons/64061?language=java
1. 첫번째 풀이<ArrayList로 풀이>
import java.util.ArrayList;
class Solution {
public int solution(int[][] board, int[] moves)
{
int answer = 0;
ArrayList<Integer> arr = new ArrayList<>();
int n = board[0].length;
for(int i = 0; i < moves.length; i++)
{
int row = moves[i]-1;
for(int j = 0; j < n; j++)
{
int value = board[j][row];
if(value == 0)
{
continue;
} else {
arr.add(value);
board[j][row] = 0;
break;
}
}
}
for (int i = 0; i<arr.size(); i++)
{
if(i < 0)
{
i = 0;
}
int next = i+1;
if (next >= arr.size())
{
break;
}
int prevValue = arr.get(i);
int nextValue = arr.get(next);
if (prevValue == nextValue)
{
answer+=2;
arr.remove(next);
arr.remove(i);
i-=2;
}
}
return answer;
}
}
난 스택이든 큐든 다 ArrayList로 풀려고 하는게 단점인것같다;
문제는 풀긴 풀었는데 출제자 의도를 집어내지 못했으므로 다시 풀어보았다.
2. 두번째 풀이<Stack으로 풀이>
import java.util.Stack;
import java.util.ArrayList;
class Solution {
public int solution(int[][] board, int[] moves)
{
int answer = 0;
Stack<Integer> stack = new Stack<>();
for(int i = 0; i < moves.length; i++)
{
int row = moves[i]-1;
for(int j = 0; j < board.length; j++)
{
int value = board[j][row];
if(value == 0)
{
continue;
}
if (stack.isEmpty())
{
stack.push(value);
} else {
if (stack.peek() == value)
{
stack.pop();
answer+=2;
} else {
stack.push(value);
}
}
board[j][row] = 0;
break;
}
}
return answer;
}
}
반응형
'CS > Algorithm' 카테고리의 다른 글
완주하지 못한 선수 (0) | 2021.04.30 |
---|---|
뉴스 클러스터링 (0) | 2021.04.29 |
삽입, 선택, 버블 정렬 (0) | 2021.04.15 |
탐색 알고리즘 (DFS) (0) | 2020.12.22 |
왕실의 나이트 (0) | 2020.12.21 |