- 내 방법 풀이
- 예전에 이 문제를 읽고 풀 방법을 생각하다가 못 풀고 남겨남었었다.
- 오늘 다시 보니, 스택을 활용해서 푸는 문제였고 기초적인 문제.. 아직 나는 한참 멀었나보다.
- 처음에는 인형이 쌓여있는 한줄마다 stack을 생성해야 했는데, 그렇게 풀었으면 메모리사용이 너무 컸을 거 같다. 다행히 굳이 그렇게 풀지 않아도 되는 것을 발견해서 풀이 방향을 수정했다.
- moves의 숫자에 해당하는 줄을 위에서부터 이차배열을 내려가면서 조회하고, 0은 패스. 숫자는 스택에 넣어주며 같은 인형인지 확인하여 인형을 삭제한다.
- 스택은 인형을 검사할 1개면 충분했고, 나머지는 반복문과 조건문으로 푸는 간단한 문제였다.
import java.util.*;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0;
Stack<Integer> box = new Stack<>();
for (int N : moves) {
int move = N - 1;
for (int i = 0; i < board.length; i++) {
if (board[i][move] == 0) continue;
else if (!box.empty() && box.peek() == board[i][move]) {
board[i][move] = 0;
box.pop();
answer += 2;
break;
} else {
box.push(board[i][move]);
board[i][move] = 0;
break;
}
}
}
return answer;
}
}
- 다른 사람 방법 풀이1
- 스택을 활용해서 푼 풀이.
- 내 풀이와 매우 유사했다.
import java.util.Stack;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0;
Stack<Integer> stack = new Stack<>();
for (int move : moves) {
for (int j = 0; j < board.length; j++) {
if (board[j][move - 1] != 0) {
if (stack.isEmpty()) {
stack.push(board[j][move - 1]);
board[j][move - 1] = 0;
break;
}
if (board[j][move - 1] == stack.peek()) {
stack.pop();
answer += 2;
} else
stack.push(board[j][move - 1]);
board[j][move - 1] = 0;
break;
}
}
}
return answer;
}
}
- 다른 사람 방법 풀이2
- 이걸 가지고 자바스럽다 할 수 있는 지는 모르겠지만, 나는 클래스를 나누어 푸는 것을 생각해보다가 for문 안 if문으로 풀었기 때문에...
import java.util.Stack;
class Solution {
static Stack<Integer> stack = new Stack<>();
static int answer = 0;
public int solution(int[][] board, int[] moves) {
for(int idx : moves) {
board = pick(board, idx - 1);
}
return answer;
}
static int[][] pick(int[][] board, int idx) {
for(int i = 0 ; i < board.length ; i++) {
if(board[i][idx] == 0) continue;
if(!stack.isEmpty() && stack.peek() == board[i][idx]) {
answer += 2;
stack.pop();
board[i][idx] = 0;
break;
}
stack.push(board[i][idx]);
board[i][idx] = 0;
break;
}
return board;
}
}
'개발지 > 코테' 카테고리의 다른 글
[프로그래머스] 코테연습 - 스킬트리 (0) | 2023.12.20 |
---|---|
[프로그래머스] 코테연습 - PCCE 기출문제 10번 / 데이터 분석 (0) | 2023.12.18 |
[프로그래머스] 코테연습 - 오픈채팅방(lv.2) (2) | 2023.12.08 |
[프로그래머스] 코테연습 - 공원 산책(lv.1) (2) | 2023.12.06 |
[프로그래머스] 코테연습 - 124 나라의 숫자(lv.2) (2) | 2023.12.04 |