2048

면접 대비

시간 제한2초메모리 제한512 MB

요약
2048 게임의 이동을 순서대로 시뮬레이션하며, 타일을 밀고 같은 값을 한 번씩 합치고 합쳐진 값을 점수에 더한다.
난이도

보통10점 중 4점

유형
시뮬레이션, 구현, 배열, 행렬
정답자
아직 제출이 없습니다

문제

2048은 슬라이딩 블록 퍼즐 게임이다. 목표는 격자 위의 숫자 타일을 밀어 같은 숫자끼리 합쳐 2048 타일을 만드는 것이다. 4×4 격자에서 진행하며, 플레이어가 화살표 키 네 개로 타일을 밀면 타일이 부드럽게 움직인다. 매 턴마다 빈 칸에 2 또는 4가 적힌 새 타일이 무작위로 나타난다. 타일은 고른 방향으로 다른 타일이나 격자 끝에 막힐 때까지 최대한 밀린다. 이동 중 같은 숫자 타일 두 개가 부딪히면 두 값의 합을 가진 타일 하나로 합쳐진다. 이렇게 합쳐진 타일은 같은 이동 중에 다시 다른 타일과 합쳐질 수 없다. 사용자의 점수는 0에서 시작하고, 두 타일이 합쳐질 때마다 새로 만들어진 타일의 값만큼 증가한다.

현재 사용자 점수, M번의 이동과 그때 무작위로 나타나는 숫자(와 격자에서의 위치), 현재 격자 값을 입력받아 이동이 끝난 뒤의 사용자 점수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 현재 사용자 점수가 주어진다. 0 ≤ S ≤ 500

둘째 줄에 앞으로의 M번 이동이 주어진다. 0 ≤ M ≤ 10

  • [이동][2|4][행][열] 예: L200, 왼쪽 화살표를 누른 뒤 0x0에 새 2가 나타남
  • 이동: L은 왼쪽, U는 위, R은 오른쪽, D는 아래

셋째 줄에 현재 격자 내용이 한 줄 문자열로 주어진다.

  • 왼쪽 위(0x0)에서 오른쪽 아래(3x3) 순서
  • 값은 2, 4, 8, 16, 32, 64, 128, 256, 512, 0 중 하나이며 공백으로 구분된다. 0은 빈 칸을 나타낸다.

출력

주어진 이동을 마친 뒤의 사용자 점수를 출력한다.

힌트

사용자 점수는 200이다.

입력 "0 2 0 0 0 4 0 0 2 8 2 0 8 32 16 2"에 대한 2048 격자는 아래와 같다.

입력된 이동은 L213,D202,R211,D210,D200,D212,R410,R200,D401,L212이다.

L213: 왼쪽, 1x3에 새 2. 합쳐지지 않음D202: 아래, 0x2에 새 2, 3x3의 4R211: 오른쪽, 1x1에 새 2, 0x3의 4
D210: 아래, 1x0에 새 2, 1x3의 8, 2x1의 4D200: 아래, 0x0에 새 2. 합쳐지지 않음D212: 아래, 1x2에 새 2, 2x0의 4
R410: 오른쪽, 1x0에 새 4, 2x1의 8R200: 오른쪽, 0x0에 새 2, 2x2의 16D401: 아래, 0x1에 새 4, 3x2의 32
L212: 왼쪽, 1x2에 새 2, 2x2의 4, 3x1의 64

합쳐진 점수를 모두 더한다: 4 + 4 + 8 + 4 + 4 + 8 + 16 + 32 + 4 + 64 = 148

시작 점수에 148을 더한다: 200 + 148 = 348

예제1

  1. 예제 1

    입력
    200
    L213D202R211D210D200D212R410R200D401L212
    0 2 0 0 0 4 0 0 2 8 2 0 8 32 16 2
    
    예상 출력
    348