본문 바로가기

환영합니다. 이 블로그 번째 방문자입니다.
Python/문제풀이

[1] 백준 12100번: 2048 (Easy)

{ 문제 }

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

 

12100번: 2048 (Easy)

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

www.acmicpc.net

 


{ 30분 노코딩 로직 사고 }

 

1. [입력] N 입력 ➡ board[N][N] 배열 0 초기화 ➡ board_check[N][N] 배열 0 초기화 ➡ board 원소 입력

2. [비교] board 행의 같은 수 연속이 많은지, 열의 같은 수 연속이 많은지 비교하는 함수 작성

    행의 수가 연속하는 경우 &  0을 끼고 같은 수가 있는 경우, row_check[] 에 1 추가

    열의 수가 연속하는 경우 &  0을 끼고 같은 수가 있는 경우, col_check[] 에 1 추가

[while(4) 반복문 안에서]

3. row_check > col_check 인 경우, 왼쪽 또는 오른쪽으로 블록을 이동시키고 합쳐지는 원소에 대해서는 board_check 를 1로 바꿔줌

4. col_check > row_check 인 경우, 위 또는 아래로 블록을 이동시키고 합쳐지는 원소에 대해서는 board_check 를 1로 바꿔줌

5. row_check, col_check을 반복하며 반복문 안에서 최댓값을 찾음

 

결론 : 대실패 / 방법 자체가 잘못된 것 같아 해답을 찾아보기로 함.

 


{ 해답 찾아보기 }

 

BFS or DFS를 이용한 문제라고 함. 근데 이거 둘 다 아직 공부 제대로 안 함. 

알고리즘 공부하고 돌아오겠음.