목록알고리즘/문제풀이 (35)
DATA101
📝 문제 https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net 💡 접근법 BFS 알고리즘과 큐(Queue) 자료구조를 활용하여 문제를 해결하였습니다. 문제해결 절차는 다음과 같습니다. 모든 국가를 대상으로 각각 중심국으로 선정하고, 상하좌우 방면에 연합이 가능한 인접국이 있는지 탐색하니다. 만일 연합국이 성립된다면, 해당 인접국을 중심으로 다시 상하좌우 방면의 인접국과 연합국이 성립되는지 여부를 확인합니다. 이 과정은 상하좌우 방면으로..
📝 문제 https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 💡 접근법 조합(Combination)을 활용하여 문제를 해결하였습니다. 총 2팀이기 때문에 하나의 팀을 구성하면 자동으로 나머지 한 팀의 팀원은 정해집니다. 먼저, 콤비네이션을 활용하여 한 팀을 구성할 수 있는 모든 경우를 구합니다. 팀 내 \(i\), \(j\)번째 구성원 간의 시너지로 짝을 이루어 능력치를 더하는 과정을 반복합니다. start 팀과 link 팀 각각의 능력치 합의 차를 절댓값으로 받는 과..
📝 문제 https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 💡 접근법 조합(combination)을 활용하여 문제를 해결하였습니다. 치킨 집의 탐색 순서가 치킨 집과 가정집 간 거리 합의 최솟값에 영향을 주지 않기 때문에, 전체 원소 중 \(N\)개 뽑는 경우의 수를 구해주는 조합을 사용했습니다. 문제 해결절차는 다음과 같이 크게 3단계입니다. 1️⃣ \(M\)개의 치킨 집 조합(combination) 구하기 2️⃣ 집마다 ..
📝 문제 https://www.acmicpc.net/problem/13460 13460번: 구슬 탈출 2 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' www.acmicpc.net 💡 접근법 BFS 알고리즘과 큐(Queue) 자료구조를 활용하여 문제를 해결하였습니다. 빨간 공과 파란 공의 좌표 정보와 보드를 기울인 횟수를 저장하는 큐가 빌 때까지 다음 작업을 반복합니다. 공이 움직일 수 있을 때까지 반복문을 활용하여 상하좌우 방향으로 움직이게 하며, 보드를 기울인 방향으로 공이 모두 움직였다면 큐에 공들의 좌표와 기..
📝 문제 https://www.acmicpc.net/problem/17143 17143번: 낚시왕 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. www.acmicpc.net 💡 접근법 문제에 주어진 조건을 빠짐 없이 고려하여 구현해야 정답을 맞출 수 있습니다. 낚시왕이 컬럼(column) 방향으로 움직이므로 컬럼을 기준으로 전체 로직이 수행됩니다. 컬럼이 결정되면 로우(row) 방향으로 상어가 있는지 탐색하고, 가장 작은 로우에 있는 상어를 낚습니다. 상어의 진행방향을 고려하여 상어의 속도까지 한 칸씩 이동시키며 상어가 이동 가능한지 체크..
📝 문제 https://www.acmicpc.net/problem/19236 19236번: 청소년 상어 첫째 줄부터 4개의 줄에 각 칸의 들어있는 물고기의 정보가 1번 행부터 순서대로 주어진다. 물고기의 정보는 두 정수 ai, bi로 이루어져 있고, ai는 물고기의 번호, bi는 방향을 의미한다. 방향 bi는 www.acmicpc.net 백준 내 아기 상어 문제의 후속 버전입니다. 💡 접근법 사용 알고리즘: DFS 알고리즘 상어가 잡아먹은 물고기 번호의 최댓값을 구해야 합니다. 상어가 어떤 물고기부터 잡아먹었는지, 그 순서에 따라 뒤이어 잡아먹을 수 있는 물고기 조합이 달라질 수 있습니다. 따라서 2번째 물고기를 선택하여 최대한 많이 먹을 수 있을 때까지 재귀적으로 물고기와 상어를 이동시켜 보는 로직을 ..
📝 문제 https://www.acmicpc.net/problem/15683 15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicpc.net 💡 접근법 DFS 알고리즘을 활용하여 문제를 해결하였습니다. 문제 풀이는 다음과 같이 크게 세 부분으로 나눌 수 있습니다. 첫째, DFS 알고리즘을 활용하여 CCTV 종류별, 방향 전환에 따른 새로운 감시영역을 재귀적으로 탐색하는 함수 둘째, 특정 방향을 바라보는 CCTV의 최대 감시영역을 찾는 함수 셋째, 모든 CCTV에 대해 탐색이 끝나면 사각지대의 최솟값을 구하는 함수 C..
📝 문제 https://www.acmicpc.net/problem/14891 14891번: 톱니바퀴 총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴 www.acmicpc.net 💡 접근법 DFS 알고리즘을 활용하여 문제를 해결하였습니다. 문제 풀이는 다음과 같이 크게 세 부분으로 나눌 수 있습니다. 첫째, 톱니바퀴를 시계 혹은 반시계 방향으로 회전시키는 함수 둘째, DFS 알고리즘을 활용하여 인접한 톱니바퀴의 회전 여부를 탐색하는 함수 셋째, \(K\)번의 회전 후에 최종적으로 점수를 계산하는 함수 특정 번호의 톱니바퀴에서 좌측과 우측에 인접한 톱니바퀴도 연..