문제 이해 단계 https://www.acmicpc.net/problem/9663 NxN짜리 체스판에 N개의 퀸을 서로 공격하지 못하게 둔다. N이 주어졌을 때 이 경우의 수를 구하는 문제 문제 접근 단계 퀸이 움직일 수 있는 경로는 위와 같다. 퀸을 정가운데 놨을 때, 노란색 영역에는 퀸을 두면 안 된다 제한사항부터 알아보면, N은 최대 14까지 가능하다.이 말은 맵은 14x14까지, 체스 말은 14개까지 가능하다는 것이다. N이 상당히 작기 때문에 완전탐색이 가능할 것 같다. N개의 퀸을 체스판에 두는 모든 경우의 수를 구해야 하기 때문에, 퀸을 모든 곳에 둬서 판단하는 방법밖에 없다. 그런데 일반적인 백트래킹으로 이를 확인하기에는, 최대 14^14로 대략 100억이 넘어간다.(시간 초과) 그래서 2..
문제 이해 단계 https://www.acmicpc.net/problem/1167 입력으로 트리의 정점 개수 V와 간선의 정보가 주어진다. 트리의 간선에는 가중치가 존재한다. 임의의 두 정점 사이의 거리 중, 가장 긴 것의 길이를 출력하는 문제 문제 접근 단계 문제 조건부터 살펴보면, 정점의 개수가 최대 100,000개다. 그렇다면 간선의 개수는 훨씬 더 많이 가능하다는 소리이다. 모든 정점을 일일이 하나씩 다 살펴보기에는 무리이다. 한 정점을 특정하여 찾는 방법밖에 없는 것 같다. 두 정점 사이의 길이가 가장 길어지려면? 트리에서 두 정점의 길이가 가장 길어지려면 어떻게 해야 할까? 당연히 한쪽 끝노드(리프 노드)에서 끝노드로 가는 것이 길이가 가장 길어질 것이다. 즉 우리가 우선적으로 찾아야 할 것은..
문제 이해 단계 https://www.acmicpc.net/problem/2638 NxM 크기의 맵에 1로 표기된 치즈가 있다. 치즈는 외부 공기와 두 번 이상 접촉하면 녹는다. 겉에서부터 치즈가 녹아내릴 때, 모든 치즈가 녹아내리는 데 걸리는 시간을 구하는 문제 문제 접근 단계 문제의 조건부터 살펴보자. 맵의 크기는 최대 100x100까지 가능하다. 맵의 크기는 그렇게 크지 않아서, 탐색을 하기에는 무리가 없을 것 같다. 문제의 유형 문제의 유형을 추측해 볼 때, 2차원 맵이 주어지고, 치즈가 없어지는 조건이 네 면 중 두 변이 접촉해야 하는 것이라고 했다. 이를 그림에서 살펴보면, 1이 없어지기 위해서는 겉에 있는 0과 2개 이상 인접해야 한다. 이를 쉽게 알아내기 위해서는 너비우선탐색(BFS)으로 ..
문제 이해 단계 https://www.acmicpc.net/problem/1043 사람 수 N과 파티의 수 M이 주어진다. 그다음줄에는 진실을 아는 사람의 번호가 주어지는데, 지민이는 모든 파티를 참석하면서 거짓말을 쳐야 한다. 하지만 진실을 아는 사람이 있는 파티에서는 무조건 진실을 말해야 한다. 진실을 들은 사람이 거짓말을 듣거나, 거짓말을 들은 사람이 진실을 들으면 이는 실패한 것이다. 해당 조건에서 지민이가 거짓말을 칠 수 있는 파티의 최대 수를 구하는 문제 문제 접근 단계 문제의 제한조건부터 살펴보자. 사람의 수 N과 파티의 수 M이 모두 50까지 가능하다. 상당히 작은 숫자라서, 완전 탐색이나 원하는 대로 풀이가 가능할 것 같다. 문제의 특징 이 문제의 특징적인 점은, 옳고 그름을 판단하기 위..
문제 이해 단계 https://www.acmicpc.net/problem/1238 N개의 마을에 연결된 M개의 단방향 도로가 존재한다. 각 도로에는 오고 가는 시간(비용)이 존재한다. N개의 마을 중 특정 마을 X로 왕복해야 하는데, 어느 마을에서 출발하는 것이 가장 시간이 오래 걸리는가? 그때의 소요 시간을 구하는 출력하는 문제 문제 접근 단계 문제 유형 유추 N개의 마을에 연결된 M개의 단방향 도로라는 말을 읽자마자 바로 그래프 탐색이 떠올랐다. 마을을 정점으로 치환하고, 단방향 도로를 단방향 간선으로 본다. 그리고 걸리는 시간을 각 간선의 가중치로 보면 완벽한 그래프 탐색 문제이다. 로직 어쨌든 이 학생들은 무조건 최단 거리로 오고 간다고 했다. 그래프 탐색에서 최단거리라고 하면 생각나는 것이 크루..
문제 이해 단계 https://www.acmicpc.net/problem/13905 섬 위에 N개의 집과 M개의 다리가 존재한다. 그리고 각 다리에는 무게 제한 K가 걸려있다. 입력으로 출발지와 목적지가 주어지는데, 혜빈이는 최대한 많은 금빼빼로를 들고 목적지까지 도착해야 한다. 각 다리에서 무게제한까지만 빼빼로를 들 수 있을 때 최대 몇 개까지 빼빼로를 옮길 수 있는가? 문제 접근 단계 제한사항부터 살펴보자. 존재하는 집의 수(N)는 100,000개, 다리의 수(M)는 300,000이다. 최대 10^5 * 10^5 = 10^10이므로, 완전탐색으로 하면 시간초과가 뜬다. 따라서 하나하나 비교하는 것은 안되고, 다른 방법이 필요하다. 그래프 탐색 결국엔 집과 집을 연결하는 것이 다리고, 그 다리에는 무게..
문제 이해 단계 https://www.acmicpc.net/problem/21941 소문자 문장 S가 주어지고, 문자열 리스트들이 주어진다. 각 문자열 리스트들은 각자 점수를 가지고 있다. 문장 S에서 모든 문자들을 지워야 하는데 아래 2가지 연산만 할 수 있다. 1. 문자열 리스트에 존재한다면 해당 부분을 지우고, 그 문자열만큼의 점수를 얻는다. 2. 문자 하나를 지우고 1점을 얻는다. 해당 연산을 통해 모든 문자를 지울 때, 얻을 수 있는 최댓값을 구하는 문제 문제 접근 단계 범위 파악 문제 조건부터 살펴보자. 문장 S는 최대 1000개까지, 문자열 리스트는 100개, 그리고 점수는 개당 10,000점까지 가능하다. 만약 문장의 길이가 1000이고, 문자열이 하나로 구성된, 개당 10,000점짜리가 ..
문제 이해 단계 https://www.acmicpc.net/problem/17141 17141번: 연구소 2 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 승원이는 연구소의 특정 위치에 바이러스 M개를 놓을 것이고, 승원이의 신호와 동시에 바이 www.acmicpc.net NxN 크기의 맵에 M개의 바이러스를 놓으려고 한다. 바이러스는 맵에 ' 2 '라고 표시되어 있는 곳에 밖에 놓지 못한다. 바이러스는 1초당 상하좌우로 인접한 모든 빈칸(1이라고 적힌 칸을 제외)한 칸으로 퍼진다. M개의 바이러스를 배치하여 최소한의 시간으로 모든 맵에 바이러스를 퍼뜨릴 때, 이 최소 시간은? 만약 모든 맵에 바이러스를 퍼뜨릴 수 없다면 -1을 출력한다. 문제 접근 단계 문..