백준/구현

백준 12100번 2048(easy)

Reenact 2022. 3. 9. 15:59

시뮬레이션 문제이다. 

이동하는 벽 부분에서 쭉 보면서 겹치는 블록이 있는지를 확인해가면서 같으면 합쳐지도록 deque을 이용해서 만들어주었다. 예를 들면 다음과 같다.

 

4*4의 1행이 2 2 4 8이라고 하자.

코드에 구현된 알고리즘을 바탕으로 deque에 넣는 과정은 다음과 같다.

맨 처음에 deque은 비어있고, 그래서 첫 번째 2는 {2, 0}으로 들어간다.

두 번째 2의 경우 덱의 뒷 부분이 {2, 0}이므로 같은 블록이면서 이전에 합쳐지지 않았으니 이를 두 번째 2와 합쳐서 다시 덱에 넣어준다. 그럼 덱에는 {4, 1}이 들어있다. 1이 나타내는 건 합쳐졌다는 뜻이고, 0은 합쳐지진 않았다는 뜻이다.

세 번째 4의 경우 덱을 확인하는데, 덱이 안비어있고 덱의 가장 뒤 원소가 {4, 1}인데 이 블록은 이미 합쳐졌던 블록이기에 그냥 {4, 0}을 덱 뒷 부분에 넣는다.

마지막으로 8의 경우도 덱의 뒷부분을 확인해서 서로 다르기 때문에 {8, 0}이 저장된다.

그럼 덱에는 {4, 1}, {4, 0}, {8, 0}이 저장되어있고, 이제 이 덱에 있는 원소를 앞에서부터 빼어가면서 행의 왼쪽 부분에 넣어주면 된다. 

'백준 > 구현' 카테고리의 다른 글

백준 14503번: 로봇 청소기  (0) 2022.03.10
백준 11559번 Puyo Puyo  (0) 2022.03.09
백준 17143번 낚시왕  (0) 2022.03.07
백준 14891번  (0) 2022.02.20
백준 18808번  (0) 2022.02.19