본문 바로가기
Blog/Study

3회 테코테코

by 코젼 2024. 9. 29.
728x90
반응형

 



요약

- stack 을 사용할 수 있다.


Stack

첫 번째 문제

https://school.programmers.co.kr/learn/courses/30/lessons/64061

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

접근 방법

- 바구니를 stack 으로 저장하고, 바구니에 동일한 인형이 연속해서 들어올 경우 삭제한다.

고민 포인트

- 값이 1 이상일 때만 인형을 뽑을 수 있다.

- board 의 최대 범위 30, moves 의 최대 범위 1,000이므로, O(N^2) 문제 풀이가 가능하다.

최종 코드 및 회고

- 직관적으로 인형을 바구니에 담는 건 stack 자료 구조를 이용했다.

- O(n^2) 30*1,000 = 30,000 으로 시간 복잡도가 측정된다.

import java.util.*;

class Solution {
    public int solution(int[][] board, int[] moves) {
        
        Stack<Integer> basket = new Stack<>();
        int answer = 0;
        
        //뽑기 횟수만큼 진행
        for (int move : moves) {
            for (int i = 0; i < board.length; i++) {
                int tmp = board[i][move - 1];
                //인형이 있는 경우만 뽑기 진행
                if (tmp > 0) {
                    //인형 1개만 뽑아서 바구니에 넣음
                    basket.push(tmp);
                    board[i][move - 1] = 0;
                    break;
                }
            }
            //바구니에 연속해서 쌓인 인형이 있을 경우 제거
            if (basket.size() > 1) {
                int pop = basket.pop();
                if (pop == basket.peek()) {
                    answer += 2;
                    basket.pop();
                }
                else basket.push(pop);
            }
        }
        return answer;
    }
}


1. 최상단 인덱스를 list 로 만드는 방법

 

2. board 를 stack 으로 만드는 방법

728x90
반응형

'Blog > Study' 카테고리의 다른 글

4회 테코테코  (0) 2024.10.06
DDD 스터디 + a  (5) 2024.10.01
2회 테코테코  (0) 2024.09.22
1회 테코테코  (4) 2024.09.15

댓글