728x90
반응형
14501번 퇴사 (DP)1. 문제https://www.acmicpc.net/problem/14501 N일 동안 상담 일정을 받았고, 각 날짜마다 상담을 진행하면 걸리는 시간과 받을 수 있는 금액이 주어진다.퇴사 전까지 최대한 많은 상담을 수행하여 최대 수익을 얻고자 한다.단, 상담은 중복되게 진행할 수 없으며, 퇴사일 이후까지 걸리는 상담도 진행할 수 없다. 입력첫째 줄에 N (1 ≤ N ≤ 15)둘째 줄부터 N개의 줄에 걸쳐, 각 날에 대한 상담 기간 T와 수익 P가 주어진다.출력최대 수익을 출력한다.문제 접근 방법수익을 최대화하는 문제이므로, 완전탐색 or DP를 고려"오늘 상담을 한다 vs 하지 않는다" 두 가지 선택지를 모든 날에 대해 고려해야 하므로 브루트포스 기반의 DP가 적절함상담을 하면 ..
2206번 벽 부수고 이동하기 (BFS)1. 문제N x M 크기의 배열에서 (0,0)에서 (N-1, M-1)까지 이동하는 문제이다.이동 중에 최대 한 번만 벽을 부수고 지나갈 수 있다. 최소 몇 번의 이동으로 목표 지점에 도달할 수 있는지 구해야 한다.입력: 첫째 줄에 N, M (1 ≤ N, M ≤ 1000)지도: 0은 이동할 수 있는 길, 1은 벽출력: 목적지까지 이동할 수 있는 최단 거리. 이동할 수 없다면 -1 출력.문제 접근 방법최단 경로를 찾는 문제 → BFS벽을 부수는 경우와 부수지 않는 경우를 모두 탐색하기 위해 ⭐️ 3차원 visited 배열 사용 ⭐️2. 풀이 과정🔍 문제 분석BFS는 각 지점에서 인접한 지점들을 모두 탐색하므로 최단 경로를 찾는 데 효과적이다.벽을 부쉈는지 여부를 기록..
백준 14502번 연구소 (BFS)1. 문제 https://www.acmicpc.net/problem/14502 문제 설명연구소에서 바이러스가 유출되었고, 바이러스의 확산을 막기 위해 벽을 3개 세워야 한다. 연구소는 N x M 크기의 격자로 주어지며,0: 빈 칸1: 벽2: 바이러스으로 이루어져 있다.바이러스는 상하좌우로 인접한 빈 칸(0)으로만 퍼져나갈 수 있다. 벽을 세울 수 있는 모든 경우의 수를 탐색해서, 안전 영역(0)의 최대 크기를 구하는 것이 목표이다.2. 풀이문제 해결 접근 방법벽 세우기빈 칸(0) 중에서 3개의 위치를 선택하여 벽을 세운다.이때, itertools.combinations()를 사용하여 모든 경우의 수를 탐색한다.바이러스 퍼뜨리기 (BFS 사용)바이러스는 상하좌우로 퍼지며,..
백준 15686번 치킨 배달 (백트래킹) 1. 문제https://www.acmicpc.net/problem/156862. 풀이목표: M개의 치킨집을 선택하여, 그 치킨집들과 집들 간의 치킨 거리 합이 되소가 되도록 하는 것 1) 치킨집과 집 정보 저장치킨집과 집을 배열에 (r, c) 형태로 저장한다.chicken = [] # 치킨집 저장할 배열: (r, c)house = []for i in range(n): for j in range(n): if city[i][j] == 1: house.append((i, j)) elif city[i][j] == 2: chicken.append((i, j)) 2) 백트래킹(Backtracking)..
백준 14889번 스타트와 링크 (백트래킹)1. 문제백준 14889번: 스타트와 링크두 팀으로 나누어 능력치의 합을 비교하는 문제이다. (n)명이 주어지면 이를 절반으로 나누어 두 팀을 구성하고, 두 팀의 능력치 차이를 최소화하는 것이 목표이다.팀의 능력치는 각 팀에 속한 두 사람의 능력치의 합으로 계산된다. 즉, 두 사람이 같은 팀에 속했을 때 (S_{ij} + S_{ji})가 팀의 능력치로 더해진다.2. 풀이이 문제는 백트래킹을 이용해 모든 경우의 수를 탐색해서 최적의 값을 찾아야 하는 문제이다.주어진 사람들을 두 팀으로 나누는 방법을 탐색하면서 팀의 능력치 차이를 계산한다.문제 풀이 방법백트래킹 함수 정의사람들을 하나씩 선택하며 두 팀으로 나누는 과정을 탐색한다.(visited) 배열을 이용해 어떤..