https://programmers.co.kr/learn/courses/30/lessons/64061?language=java
풀이
변수
- doll : 꺼낸 인형을 넣을 리스트나 스택 doll
- board[i][m-1] : 꺼낸인형
- answer : 터트린 인형개수
알고리즘
- moves 만큼 for문 돌림
- board의 길이만큼 for문 돌림
- 꺼낸인형(board[i][m-1]) 이 0일 경우에는 continue
- 꺼낸인형이 0이 아닐 시
- doll에 넣은 마지막 인형과 같다면 인형을 터트리고 answer+2를 해줌
- 아니라면 doll에 넣어줌
- 인형을 꺼냈기 때문에 board[i][m-1] = 0
- board의 길이만큼 for문 돌림
ArrayList 사용
import java.util.ArrayList;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0; // 터트려 사라진 인형개수
ArrayList<Integer> dolls = new ArrayList<>(); // 바구니
for(int move : moves){
for(int i=0;i<board.length;i++){
int doll = board[i][move-1];
board[i][move-1] = 0; // 인형뽑음
if(doll != 0){
if(dolls.size() == 0) dolls.add(doll); // 첫번째뽑기
else if(doll != dolls.get(dolls.size()-1)) {dolls.add(doll); } // 바구니에 넣음
else { dolls.remove(dolls.size()-1); answer += 2;} // 터짐
break;
}
}
}
return answer;
}
}
Stack 사용
import java.util.Stack;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0; // 터트려 사라진 인형개수
Stack<Integer> dolls = new Stack<>(); // 바구니
for(int move : moves){
for(int i=0;i<board.length;i++){
int doll = board[i][move-1];
board[i][move-1] = 0; // 인형뽑음
if(doll != 0){
if(dolls.empty()) dolls.push(doll); // 첫번째뽑기
else if(doll != dolls.peek()) {dolls.push(doll); } // 바구니에 넣음
else { dolls.pop(); answer += 2;} // 터짐
break;
}
}
}
return answer;
}
}
'Algorithm & Data Structure > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 : 완주하지 못한 선수 (feat. HashMap) (0) | 2022.02.14 |
---|---|
[Java] 프로그래머스 : 키패드 누르기 (0) | 2022.02.14 |
[Java] 프로그래머스 : 체육복 (0) | 2022.02.14 |
[Java] 프로그래머스 : 모의고사 (0) | 2022.02.11 |
[Java] 프로그래머스 : k번째 수 (0) | 2022.02.11 |