2048 (Easy)
문제
2048 게임은 4×4 크기의 보드에서 혼자 즐기는 재미있는 게임이다. 이 링크를 누르면 게임을 해볼 수 있다.
이 게임에서 한 번의 이동은 보드 위에 있는 전체 블록을 상하좌우 네 방향 중 하나로 이동시키는 것이다. 이때, 같은 값을 갖는 두 블록이 충돌하면 두 블록은 하나로 합쳐지게 된다. 한 번의 이동에서 이미 합쳐진 블록은 또 다른 블록과 다시 합쳐질 수 없다. (실제 게임에서는 이동을 한 번 할 때마다 블록이 추가되지만, 이 문제에서 블록이 추가되는 경우는 없다)
입력
첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2보다 크거나 같고, 1024보다 작거나 같은 2의 제곱꼴이다. 블록은 적어도 하나 주어진다.
출력
최대 5번 이동시켜서 얻을 수 있는 가장 큰 블록을 출력한다.
www.acmicpc.net/workbook/view/1152
문제집: 삼성 SW 역량 테스트 기출 문제 (baekjoon)
www.acmicpc.net
삼성 SW 역량 테스트 두번째 문제 2048(Easy)를 풀어보았다.
문제에서 5번 이동해서 구할수 있는 최댓값을 구하라고 되어있으므로 DFS 를 써야지 라는 생각은 바로 들었는데
그다음부터 어떻게 움직여야 최선일까? 라는 생각이 잘못됬다고 생각한다.
생각의 순서는
1. DFS로 풀어야지.
2. 상하좌우 숫자를 어떻게 움직일까.
3. 배열을 어떤식으로 원상복구 해줄까.
다음의 세가지에 집중하면서
백준 12100번 2048(Easy)
문제 링크입니다: https://www.acmicpc.net/problem/12100 핸드폰 게임인 2048을 모티브로 만든 문제이지만 게임과는 달리 한번 shift에서 이미 합체된 블록은 더 이상 합체되지 않는 점이 특징이였습니다.
jaimemin.tistory.com
이 분의 코드를 따라했다. 늘 느끼는거지만 코딩테스트 어렵다.. 나만 어렵나 오늘은 코드를 따로 올리지 않겠다.
90퍼센트 위의 코드랑 똑같다.
12100번: 2048 (Easy)
첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2
www.acmicpc.net
'Programming > Algorithm' 카테고리의 다른 글
[mathmatics BOJ-13458] 시험감독, c++ (1) | 2021.05.11 |
---|---|
[Implementation, BOJ-3190] 뱀, c++ (0) | 2021.05.11 |
[graph theory, BOJ-13460] 구슬 탈출2, c++ (0) | 2021.05.09 |
[graph theory, BOJ-1197] 최소 스패닝 트리, c++ (0) | 2021.05.06 |
[graph theory, BOJ-2206] 벽부수고 이동하기, c++ (0) | 2021.05.03 |