본문 바로가기

dfs

(4)
백준 12094 - 2048(Hard) https://www.acmicpc.net/problem/12094 12094번: 2048 (Hard) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 보드 움직이기 먼저 보드를 움직이는 로직을 살펴보겠다. 간단하게 위로 움직이는 로직만 살펴본다. private static boolean move(Direction dir, int cnt) { int[][] map = maps[cnt]; boolean isChanged = false; switch (dir) { case TOP: for (int j = 0; j < N;..
백준 9202 - Boggle https://www.acmicpc.net/problem/9202 9202번: Boggle 각각의 Boggle에 대해, 얻을 수 있는 최대 점수, 가장 긴 단어, 찾은 단어의 개수를 출력한다. 한 Boggle에서 같은 단어를 여러 번 찾은 경우에는 한 번만 찾은 것으로 센다. 가장 긴 단어가 여러 개 www.acmicpc.net 접근방법 결론적으로 문제를 정리해보면 다음과 같다. 단어는 인접한 글자로 만들 수 있다. 한 블록(주사위)은 각 단어에 한 번까지만 사용가능하다. 단어를 만들면 그 단어의 길이에 따라 점수를 부여받는다. 주어진 Boggle grid에서 받을 수 있는 최대 점수와 찾을 수 있는 가장 긴 단어와 찾은 단어의 수를 구해라! 주의점 한 boggle에서 같은 단어 여러 번 찾기 불가능하다..
백준 12100 - 2048 (Easy) https://www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 문제 분석 문제 자체는 굉장히 간단하다. 처음에 주어진 블록에서 5번을 움직여서 가장 큰 블록을 찾으면 된다. 주의점은 한 번 움직일 때 같은 칸에서 두 번 합쳐질 수 없으며, 이동하는 방향을 우선으로 합쳐야 한다. 위 그림을 예시로 보자. 왼쪽 블록들을 위쪽으로 움직인 경우의 결과에 대한 그림이다. 결과블록의 첫번째 열을 보면 4가 중복되었지만 합쳐지지 못했다. 왜냐..
백준 15997 - 승부 예측 백준 승부예측 15997번: 승부 예측 첫 번째 줄에 조별리그를 진행할 국가명 네 개가 공백으로 구분되어 주어진다. 주어지는 모든 국가명은 알파벳 대문자로만 구성된 길이가 1 이상 10 이하인 문자열이다. 두 번째 줄부터 일곱 번 www.acmicpc.net 승부 예측 문제는 각 4팀이 다음 라운드로 진출할 확률이 얼마나 되는지 구하는 문제다. 처음에 봤을 때 막막했지만, 침착하게 생각하니 풀 수 있었다. 먼저 이 문제의 핵심은 다음과 같다. 위 그림처럼 모든 경우의 수에 대해 탐색을 해봐야 한다.(선은 다 그리진 못 했다.) 총 6경기를 하는데 각 6경기마다 이기고 비기고 지는 3가지 경우가 생기기때문에 모든 경우의 수는 3의 6승 = 729가 된다. 하지만 확률 중 0이 있으면 경우의 수는 줄어든다...