목록View All (352)
DATA101

📝 문제 https://www.acmicpc.net/problem/14891 14891번: 톱니바퀴 총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴 www.acmicpc.net 💡 접근법 DFS 알고리즘을 활용하여 문제를 해결하였습니다. 문제 풀이는 다음과 같이 크게 세 부분으로 나눌 수 있습니다. 첫째, 톱니바퀴를 시계 혹은 반시계 방향으로 회전시키는 함수 둘째, DFS 알고리즘을 활용하여 인접한 톱니바퀴의 회전 여부를 탐색하는 함수 셋째, \(K\)번의 회전 후에 최종적으로 점수를 계산하는 함수 특정 번호의 톱니바퀴에서 좌측과 우측에 인접한 톱니바퀴도 연..

📝 문제 https://www.acmicpc.net/problem/16236 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net 💡 접근법 1) 알고리즘 및 자료구조 BFS 알고리즘과 큐(Queue) 자료구조를 활용하여 문제를 해결하였습니다. 상어가 새로운 좌표로 이동하면, 탐색 시작점 역시 해당 새로운 좌표로 이동한 것과 같습니다. 따라서 초기 상어의 위치를 큐에 넣고 탐색할 때마다 꺼내며, 새로운 좌표로 이동할 때마다 큐에 넣는 과정을 반복하면 됩니다. 2) 문제풀이 전략 상어는 가능한 최대한 많은 물고..

📝 문제 https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 💡 접근법 1) 문제해결 절차 문제해결 절차는 다음과 같이 크게 3단계입니다. 1️⃣ 벽을 세울 수 있는 3개 지점의 모든 조합 찾기 2️⃣ 앞서 1️⃣에서 정한 지점에 벽을 세우고 바이러스 전파 3️⃣ 가장 넓은 안전지대의 범위 출력 2) 문제해결 방법 BFS 알고리즘을 활용하여 문제를 해결하였습니다. 조합(combination)을 사용한 경우와 하지 않은 경우를 나누어 풀어봤습니다. 각각 나누어 ..

❓ 에러 메시지 커밋 중에 다음과 같은 에러를 마주했습니다. "Changes not staged for commit:" ... no changes added to commit 💡 원인 문제는 현재 터미널의 디렉토리 위치와 수정된 파일의 원격 저장소 경로가 다르기 때문에 발생한 것입니다. 저의 경우에는 최상위 폴더의 하위 폴더인 dfs-bfs 내 파이썬 파일의 코드를 수정하였습니다. 로컬 내 수정한 파일 위치와는 다르게, 터미널 내 디렉토리는 최상위 폴더의 하위 폴더인(dfs-bfs 폴더와 같은 레벨) boj입니다. 여기서 커밋을 시도했더니 다음과 같은 에러가 발생했죠. ✅ 해결방법 해결 방법은 크게 2가지입니다. 첫째, add 시 커밋할 파일의 경로까지 입력하는 경우 둘째, 최상위 디렉토리에서 커밋하는 ..

📝 문제 https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 💡 접근법 DFS 알고리즘을 활용하여 문제를 해결하였습니다. \(N\)개의 숫자의 순서는 고정입니다. 따라서 DFS 알고리즘으로 모든 연산자 조합으로 연산을 수행하고 연산 결괏값의 최솟값, 최댓값을 구하면 됩니다. 💻 코드 1) 전체 코드 import sys; input = sys.stdin.readline def solve(i, r..

📝 문제 https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 💡 접근법 다이나믹프로그래밍(DP)을 활용하여 해결하였습니다. DFS 알고리즘으로도 해결 가능합니다. 이와 관련한 해설은 이곳을 참고해 주세요. DP를 활용한 풀이는 다음과 같습니다. 저는 근무 가능일이 아닌 퇴사일로부터 근무가 가능한 첫 날까지 역순으로 근무 선택일에 따른 이익을 계산하였습니다. 즉, 퇴사일로부터 \(i\)번째까지 근무한 경우 이익은 \((i+1)\)까지 근무한 경우의 이익과 \((i+t)\)까지 근무한 경우의 이익 중 최댓값을 고르도록 로직을 작성하였습니다. 만일 해당 일에 근무하지 않으면 \(i\)번째 ..

📝 문제 https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 💡 접근법 DFS 알고리즘으로 문제를 해결하였습니다. 다이나믹 프로그래밍(DP)로도 문제 해결이 가능합니다. DP 관련 풀이는 이곳을 참고해 주시고, 본 포스팅에서는 DFS 기반 풀이만 공유합니다. 문제 풀이의 핵심은 상담 수수료는 낮은데 상담 소요일이 긴 근무일은 근무를 하지 않도록 하는 것입니다. 예를 들어, 근무 가능일이 \(4\)일 남았고 상담 수수료와 소요일이 아래 표와 같이 주어졌다고 가정해 보겠습니다. 근무일 Day 1 Day 2 Day 3 Day 4 상담 수수료 20 30 40 50 상담 소요일 2 3 4 5 ..

📝 문제 https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변 www.acmicpc.net 💡 접근법 DFS 알고리즘을 활용하여 문제를 해결하였습니다. DFS를 통해 특정 좌표에 상하좌우 방면으로 3개의 블록을 이어 붙이면 'ㅏ', 'ㅓ', 'ㅗ', 'ㅜ' 모양을 제외한 모든 테트로미노를 만들 수 있습니다. 'ㅏ', 'ㅓ', 'ㅗ', 'ㅜ' 모양의 테트로미노는 2번째 블록까지 붙였을 때 새로운 블록에서 이어붙일 다음 블록을 탐색하지 않고 다시 기존 블록 위치에서 탐색하도록 로직..