목록시뮬레이션 (21)
기록방
👉 문제링크🔸 문제 분석 🔸N x M 직사각형 땅에 수영장을 만든다. 격자 속 숫자가 해당 땅의 높이이다.물을 채워야 하는데, 물은 상하좌우 높은 곳에서 낮은 곳으로만 흐르고 격자 밖으로는 무한정 흘러나가 버린다.채울 수 있는 물의 양의 최대값을 출력한다.🔸 문제 풀이 🔸상하좌우 인접 땅으로 흐르는 물의 이동을 구현하기 위해서 BFS를 사용한다.외각에 붙은 땅은 물이 고일 수 없으므로, 역방향 BFS를 통해 이어진 땅들을 모두 체크한다.물이 고일 수 있는 땅들에 물을 채우고 총합을 출력한다.물 높이의 최대값은 2가지 기준을 유의해서 정한다.해당 높이보다 높아지면 물이 흘러나가버리는 경우 : 최대값의 인덱스가 체크된 경우흘러나가지는 않지만, 땅이 높아서 조금 더 높이 물이 고이는 경우 : 최대값의..
👉 문제링크🔸 문제 분석 🔸좌표가 0부터 시작하는 101 x 101 격자판이 있다.N번의 드래곤 커브를 수행한 후에 한 격자의 네 꼭짓점이 모두 드래곤 커브에 포함 된 칸의 개수를 출력한다.드래곤 커브란 세대를 걸칠 수록 이전 세대의 마지막 점을 기준으로 기존 커브 그림을 90도 시계방향으로 돌려 추가로 이어 그리는 것이다.🔸 문제 풀이 🔸단순 구현/시뮬레이션 문제이다. 세대를 반복 할 때, 이전 세대의 회전 정보가 필요하다. 따라서 회전 정보를 누적해서 저장해야 하는데, 그 크기는 2^세대 수이다.세대를 반복 할 때마다 이전 회전 정보를 역순으로 조회해서 드래곤 커브를 계산하면 된다.마지막으로 칸의 개수를 카운트 할 때는 왼쪽 위 꼭짓점을 기준으로 격자판의 범위를 벗어나지 않게 조회한다.🔸 ..
👉 문제링크 14499번: 주사위 굴리기첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지www.acmicpc.net🔸 문제 분석 🔸N x M 지도에서 정육면체 주사위를 굴려가며, 주사위 윗면의 숫자를 출력한다.주사위가 이동했을 때 다음과 같은 숫자 변화가 있다.이동한 지도의 칸의 숫자가 0이면, 맞닿아 있는 주사위 아랫면의 숫자가 지도로 복사된다.이동한 지도의 칸의 숫자가 0이 아니면, 지도의 숫자가 주사위 아랫면으로 복사된다.🔸 문제 풀이 🔸주사위의 회전에 따른 숫자 이동을 구현한다.지도상의 ..
👉 문제링크 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 🔸 문제 분석 🔸 NxN 게임판에서 뱀이 이동하는 게임이 몇초간 진행 되는지 반환한다. 게임 판에는 K개의 사과가 있고, 사과를 먹으면 몸 길이가 1 늘어나며 기존의 꼬리 위치가 변경되지 않는다. 몸 혹은 게임판 벽에 부딪히면 게임이 종료된다. 🔸 문제 풀이 🔸 특별한 알고리즘이 없는 시뮬레이션 문제이다. 뱀의 방향 전환 정보와 뱀의 꼬리 좌표를 기억하기 위해 큐 자료구조를 사용한다. 🔸 코드 🔸 import java.io.*; import java.uti..
👉 문제링크 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 🔸 문제 분석 🔸 N x N 게임 판에서 2048을 수행한다. 5번 수행했을 때 최대값을 출력한다. 🔸 문제 풀이 🔸 2048게임 규칙에 따라 구현하면 되는 문제이다. 이동 방향에 따라 모든 칸의 숫자가 이동한다. 같은 숫자는 합쳐지고, 같은 회차에서 더이상 합쳐지지 않는다. 먼저 움직인 숫자가 먼저 합쳐진다. 최대값을 찾기위해 5회 게임 횟수의 모든 경우의 수를 확인한다. 풀이는 DFS로 탐색하였다. 🔸 코드 🔸 impo..