반응형
https://school.programmers.co.kr/learn/courses/30/lessons/64061
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
★스택(Stack)이란? ★
후입선출(LIFO : Last In, First Out)
import java.util.Stack;
Stack<Integer> basket = new Stack<>(); // 스택 바구니 생성
1. 데이터 넣기 : push(값)
스택의 맨 위에 데이터를 넣는다
basket.push(1);
basket.push(2); // 바구니 상태 : [1, 2] (2가 맨 위)
2. 맨 위의 데이터 꺼내서 삭제하기 : pop()
int topElement = basket.pop(); // 맨 위에 있던 2를 꺼냄
// 바구니 상태 : [1]
3. 맨 위의 데이터 '확인만' 하기 : peek()
방금 뽑은 인형이 바구니 맨 위의 인형이랑 같은 종류인지 비교할때
int topValue = basket.peek(); // 현재 맨 위인 1을 확인함 (삭제X)
4. 바구니가 비어있는지 확인 : isEmpty()
아무것도 없을때 : true, 들어있으면 false
비어있을때 peek()이나 pop() 호출하면 에러
if(!basket.isEmpty()){
// 바구니가 비어있지 않을 때만 맨 위 확인
int top = basket.peek();
}
★2차원 배열 크기 구하기★
int rowCount = board.length; // 세로 크기 (행의 개수)
int colCount = board[0].length; // 가로 크기 (열의 개수)
내 풀이
★moves에 들어있는 값은 1부터 시작해서 인덱스로 접근할때 1빼주기!!! ★
import java.util.Stack;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0;
Stack<Integer> basket = new Stack<>();
for(int num : moves){
for(int i=0; i < board.length; i++){
int item = board[i][num-1];
if(item != 0){ // 인형이 있을 때
board[i][num-1] = 0;
if(!basket.isEmpty() && item == basket.peek()){ // 바구니가 비어있지 않으면
basket.pop();
answer += 2;
} else {
basket.push(item);
}
break;
}
}
}
return answer;
}
}반응형
'코딩테스트' 카테고리의 다른 글
| Stream 코딩테스트 단골 치트키 3선 (0) | 2026.07.09 |
|---|---|
| [프로그래머스/Java] 개인정보 수집 유효기간 (split 개념) (0) | 2026.07.09 |
| [프로그래머스/Java] 키패드 누르기 (0) | 2026.07.08 |
| [프로그래머스/Java] 최소 직사각형 (0) | 2026.07.08 |
| [프로그래머스/Java] 모의고사 (ArrayList 개념) (0) | 2026.07.08 |