일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 운영체제
- 백준
- 자료구조
- 그리디 알고리즘
- OS
- DirectX 12
- 멀티프로세서
- codility
- 다이나믹 프로그래밍
- 컨디션 변수
- 병행성
- DirectX12
- 스케줄링
- 멀티쓰레드
- 렌더링 파이프라인
- I/O장치
- 프로그래머스
- 영속성
- directx
- 병행성 관련 오류
- Direct12
- 쓰레드
- 그리디알고리즘
- 알고리즘
- 다이나믹프로그래밍
- 동적계획법
- 타입 객체
- 디자인패턴
- 파일시스템 구현
- 락
Archives
- Today
- Total
기록공간
크레인 인형뽑기 게임 (프로그래머스) 본문
반응형
크레인으로 옮겨진 인형들은 바구니에 차곡차곡 쌓이기 때문에 스택을 이용하면 편하다.
접근 방법은 다음과 같다.
-
우선 크레인을 특정 인덱스에 있는 인형을 집어야 한다.
-
특정 인덱스인 그 열에서 첫번째 행부터 마지막 행까지 반복하며 인덱스 접근으로 인형을 찾는다.
-
인형이 있는경우 반복문을 빠져나오고 그 자리를 빈공간으로 만들어 준다.
-
집어넣기 전에, 바구니에 마지막으로 넣은 인형이 현재 크레인이 집은 인형과 같다면 두 인형은 터뜨려져야 하므로 바구니에서 인형을 꺼내고 크레인이 집은 인형은 바구니에 넣지 않는다.
-
바구니가 비어 있거나 바구니에 마지막으로 넣은 인형과 다르면 크레인이 집은 인형을 바구니에 넣는다.
코드는 다음과 같다.
#include <vector>
#include <stack> // STL 스택 사용을 위함
using namespace std;
int solution(vector<vector<int>> board, vector<int> moves)
{
int answer = 0;
stack<int> s;
for(const auto iter : moves)
{
int move = iter - 1; // 크레인이 집어야 하는 인덱스 위치 (열)
// 그 열의 첫번째 행부터 마지막 행까지 반복한다.
for(int i = 0; i < board.size(); ++i)
{
// 만약 인형이 있다면
if(board[i][move] != 0)
{
// 바구니가 빈 경우 인형을 집어 넣는다.
if(s.empty()) s.push(board[i][move]);
else
{
// 바구니가 비어있지 않은 경우
// 마지막으로 넣은 인형이 크레인이 집은 인형과 같은 경우
if(s.top() == board[i][move])
{
// 바구니에서 인형을 꺼내고 터뜨린 인형 수를 기록한다.
s.pop();
answer += 2;
}
// 아니면 그냥 바구니에 넣는다.
else s.push(board[i][move]);
}
// 크레인이 집은 인형의 자리는 빈공간으로 채운다.
board[i][move] = 0;
break;
}
}
}
return answer;
}
반응형
'Algorithm > 문제' 카테고리의 다른 글
타일 장식물 (프로그래머스) (0) | 2020.05.19 |
---|---|
비밀지도 (프로그래머스) (0) | 2020.05.16 |
베스트앨범 (프로그래머스) (0) | 2020.05.11 |
위장 (프로그래머스) (0) | 2020.05.11 |
전화번호 목록 (프로그래머스) (0) | 2020.05.11 |
Comments