티스토리 뷰

반응형

https://www.acmicpc.net/problem/12100

 

12100번: 2048 (Easy)

첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2

www.acmicpc.net

 

난이도 : 골드 2

 

난이도에 비해 어렵지 않은 문제였습니다.

백트래킹으로 구현을 하면 풀 수 있습니다.

 

총 5번의 이동으로 가장 큰 수를 구해야 하므로 각 이동(상, 하, 좌, 우)을 백트래킹을 이용해 구현했습니다.

 


전역 변수 

n = 맵의 크기

answer = 5번의 이동이 끝났을 때의 가장 큰 값

map = 게임 판

메소드

void main 

입력을 받고 게임을 시작한 후 answer를 출력합니다.

(game 호출)

 

void game

총 5번의 동작을 합니다.

매 동작 전 백트래킹이 가능하도록 map을 copy 배열에 복사해둡니다.

동작 후 재귀가 끝났을 때 copy배열의 값을 map으로 불러와 기존 값을 복구합니다.

 

void move

dir의 값에 따라 동작을 달리합니다.

0 - 상, 1 - 하, 2 - 좌, 3 - 우입니다.

index는 값을 넣을 위치를 가리키고, block은 최근 블록의 수를 저장합니다.

 

2 2 4 0을 위로 몰아넣는 동작 과정을 그림으로 나타낸 것입니다.

 

void findMax

map을 순회하며 가장 큰 수를 찾아냅니다.

 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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
글 보관함