[프로그래머스/C++] ㅡ LV1 - 크레인 인형뽑기 게임

2021. 2. 21. 00:57·dev/코딩테스트(프로그래머스)

문제

programmers.co.kr/learn/courses/30/lessons/64061

 

코딩테스트 연습 - 크레인 인형뽑기 게임

[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4

programmers.co.kr

풀이

#include <vector>
#include <stack>

using namespace std;

int solution(vector<vector<int>> board, vector<int> moves) {
    stack<int> s;
    int cnt = 0;
    for (int i=0; i<moves.size(); i++) {
        int x = moves[i]-1;
        for (int j=0; j<board.size(); j++) {
            int y = board[j][x];
            if (y !=0) {	// 인형 존재함
                if (!s.empty() && s.top() == y) {	// 인형 연속으로 쌓임
                    board[j][x] =0;
                    s.pop();
                    cnt+=2;
                }
                else {		// 인형 연속 아님
                      s.push(y);
                      board[j][x] =0;
                }
                break;
            }
        }
    }
    return cnt;
}

개념

프로그래머스에서는 입력 받는 부분 코드를 작성하지 않아도 된다.

solution 함수에 인수로 들어오는 값이 입력이다.

 

int main() {

    solution(입력);

    return 0;

}

 

 

이렇게 생각하면 간단한 것 같다.


vector<int> moves 는 일차원 배열, vector<vector<int>> board 는 이차원 배열이다.

 

board.size() 는 board[x][y] 에서 x인 행의 크기를 의미한다.

board[x].size() 는 이제 board[x]의 y인 열의 크기이다.

 

if (!s.empty() && s.top() == y) 에서 !s.empty()를 꼭 넣어야한다.

s 스택이 empty일 때 s.top()을 참조하는 것은 에러를 유발한다.

 


풀이

 

일단 선입후출(FIFO)이므로 stack을 사용하기로 생각했다.

 

2중 반복문을 통해 탐색하는 과정이다.

 

반복문

moves 배열의 크기만큼 크레인 사용을 반복한다.

x를 정의하여 각 moves 의 배열에 존재하는 값을 대입한다. (배열값은 0부터 시작이므로 moves[]-1을 하였다)

 

반복문

board의 행의 크기만큼 탐색을 반복한다.

y를 정의하여 해당 행의 x열 값을 대입한다.

 

if문

y가 0이면 다음 행을 탐색하며, 인형이 없는 곳에서는 아무일도 일어나지 않는다.

 

if문

y가 0이 아닐 때, 2가지 케이스로 나뉜다.

 

①스택 맨 위 값이 y와 같음

②그렇지 않음

 

1의 경우 스택에서 값을 빼주고 cnt에 +2를 한다.

2의 경우 스택에 새로운 값을 넣어준다.

 

y가 아닌 경우 다음 탐색이 진행될 필요가 없다.

따라서 둘다 break를 사용한다.

'dev > 코딩테스트(프로그래머스)' 카테고리의 다른 글

[프로그래머스/C++] ㅡ LV1 - K번째수  (0) 2021.02.24
[프로그래머스/C++] ㅡ LV1 - 모의고사  (0) 2021.02.24
[프로그래머스/C++] ㅡ LV1 - 신규 아이디 추천  (0) 2021.02.23
[프로그래머스/C++] ㅡ LV1 - 완주하지 못한 선수  (0) 2021.02.23
[프로그래머스/C++] ㅡ LV1 - 두 개 뽑아서 더하기  (0) 2021.02.21
'dev/코딩테스트(프로그래머스)' 카테고리의 다른 글
  • [프로그래머스/C++] ㅡ LV1 - 모의고사
  • [프로그래머스/C++] ㅡ LV1 - 신규 아이디 추천
  • [프로그래머스/C++] ㅡ LV1 - 완주하지 못한 선수
  • [프로그래머스/C++] ㅡ LV1 - 두 개 뽑아서 더하기
dev_dev
dev_dev
C++, Python, ML, Vue
  • dev_dev
    develop about develop
    dev_dev
  • 전체
    오늘
    어제
    • 카테고리 (145) N
      • dev (144) N
        • C++ (44)
        • ML DL (1)
        • on-device AI (5) N
        • AIOT (9)
        • IOT (1)
        • 코딩테스트(백준) (49)
        • 코딩테스트(프로그래머스) (25)
        • 전자공학 (7)
        • 창업 (1)
        • 웹 (1)
        • 자격증 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    데이터 분석
    decltype
    머신러닝
    경사하강법
    Template
    인공지능
    COLAB
    uniform initialization
    auto
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
dev_dev
[프로그래머스/C++] ㅡ LV1 - 크레인 인형뽑기 게임
상단으로

티스토리툴바