자세한 설명은 https://school.programmers.co.kr/learn/courses/30/lessons/64061
n*n board 배열에 있는 인형을 뽑을때 같은 인형이 연속해서 나오면 터진다
터지는 횟수 구하기
내 풀이
실패.. 반복문 안의 조건을 잘못 쓴 것 같은데 원인을 찾기 못했다
!찾은 값을 초기화 해주는것을 안해서 오답이엿고, 인형도 2개씩 터지는데 하나씩만 더해줬엇다
import java.util.*;
public class Main {
public int Solution(int[][] board, int[] moves){
int ans = 0;
Stack<Integer> st = new Stack<>();
for(int i : moves){
int tmp = 0;
while (tmp < board.length){
//2차원 배열에서 만난 값이 0이아님, 값이 들어 있으면
if(board[tmp][i-1] != 0){
if(st.empty()) st.push(board[tmp][i-1]);
else {
if(st.peek() == board[tmp][i-1]){
st.pop();
ans++;
}
else st.push(board[tmp][i-1]);
}
break;
}
else tmp++;
}
}
return ans;
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[][] board = new int[n][n];
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++) {
board[i][j] = in.nextInt();
}
}
int k = in.nextInt();
int[] moves = new int[k];
for(int i =0; i < k; i++) moves[i] = in.nextInt();
System.out.println(T.Solution(board,moves));
}
}
강의 풀이
!찾은 값을 초기화 해주는것을 안해서 자꾸 틀린 것 같다.., 인형도 2개씩 터지는데 하나씩만 더해줬엇다
import java.util.*;
public class Main {
public int Solution(int[][] board, int[] moves){
int ans = 0;
Stack<Integer> st = new Stack<>();
for(int i : moves){
//크레인 하강 행 방향으로
for(int j = 0; j < board.length; j++){
if(board[j][i-1] != 0){
int tmp = board[j][i-1];
//인형을 가져온 곳은 0으로 바꿔주기
board[j][i-1] = 0;
if(!st.empty() && tmp == st.peek()){
//인형 두개 터지니까 +2
ans += 2;
st.pop();
}
else st.push(tmp);
break;
}
}
}
return ans;
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[][] board = new int[n][n];
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++) {
board[i][j] = in.nextInt();
}
}
int k = in.nextInt();
int[] moves = new int[k];
for(int i =0; i < k; i++) moves[i] = in.nextInt();
System.out.println(T.Solution(board,moves));
}
}
위에 같은 실수는 앞으로 하지 말게 잘 기억해두자