목록Baekjoon (177)
GitHubSeob

문제 https://www.acmicpc.net/problem/11404 11404번: 플로이드 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 www.acmicpc.net 문제풀이 제목 그대로 플로이드 와샬 문제이다. 도시는 n개가 주어지고 버스는 m개가 주어진다. 주의해야 할 점은 예제를 보면 같은 시작 도시, 같은 도착 도시가 나올 수 있다. (1, 4, 1), (1, 4 ,2) 그래서 값을 입력받을 때마다 최솟값을 벡터에 저장해줘야 한다. 그리고 i에서 i를 포함하여 i에서 j를 갈 수 없는 경우는 그 자리에 0을 출력해줘야 한다. 비용은 100,000 ..

문제 https://www.acmicpc.net/problem/1238 1238번: 파티 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어 www.acmicpc.net 문제풀 이 다익스트라 알고리즘으로 풀었다. 양방향이 아닌 단방향의 도로의 정보가 주어지므로 조심해야한다. 도로들의 정보를 입력받고, 다익스트라 알고리즘을 통해 최단 거리를 저장한다. ( min_time[town1][town2] = x라면 town1에서 town2로 x의 시간이 걸린다는 의미 ) 반복문을 통해 N마을에서 X마을로 가는 시간, X마을에서 N마을로 가..

문제 https://www.acmicpc.net/problem/20210 20210번: 파일 탐색기 첫 줄에 문자열의 개수 N(2 ≤ N ≤ 10,000)이 주어진다. 그 다음 N줄에 정렬할 문자열이 한 줄에 하나씩 주어진다. 모든 문자열의 길이는 100 이하이며, 알파벳 대소문자와 숫자로만 이루어져 있다. www.acmicpc.net 문제풀이 단순 코딩이라 지저분하게 풀었다. 조건자체는 어려운 게 크게 없어 보이지만 0과 숫자가 2^63를 초과할 수 있단 점에서 고생을 했다. 조건이 많아 return 할 것이 많다 보니까 반례의 문자열 순서에 따라 답이 다르게 나오는 경우도 있었다. 문제를 제출한 사람이 거의 없어서 반례를 찾는데도 고생했다. 숫자와 알파벳이 오면 숫자가 더 앞에 온다. 같은 알파벳인 ..

문제 https://www.acmicpc.net/problem/20437 20437번: 문자열 게임 2 첫 번째 문자열에서 3번에서 구한 문자열은 aqua, 4번에서 구한 문자열은 raquator이다. 두 번째 문자열에서는 어떤 문자가 5개 포함된 문자열을 찾을 수 없으므로 -1을 출력한다. www.acmicpc.net 문제풀이 문자열과 정수를 입력받았을 때, 첫 글자와 끝글자가 같은 문자열 중 가장 짧은 길이, 가장 긴 길이를 구하는 문제이다. 단순히 알파벳의 개수, 위치를 저장하는 벡터를 만들고, 벡터를 탐색하면서 값들을 구하면 된다. for (idx = 0; idx < W.size(); ++idx) { cnt[W[idx] - 'a']++; alp[W[idx] - 'a'].push_back(idx);..

문제 https://www.acmicpc.net/problem/17609 17609번: 회문 각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다. www.acmicpc.net 문제풀이 왼쪽, 오른쪽, 문자를 삭제한 개수의 정보를 갖는 DFS함수를 만들어서 풀었다. 문자열을 입력받고 왼쪽은 0, 오른쪽은 문자열 길이-1, 삭제한 문자열 개수는 0으로 둔다. 왼쪽이 오른쪽을 넘어서면 탐색을 다 했으므로 answer값을 최솟값으로 갱신한다. 왼쪽 문자와 오른쪽 문자가 같으면 각각 한 칸씩 옮기고 DFS함수를 실행한다. 왼쪽문자와 오른쪽문자가 다를 경우 조건을 확인하고 만족하면 조건문을 실행한다. 왼..

문제 https://www.acmicpc.net/problem/1202 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net 문제풀이 처음에는 보석의 가격이 큰 순, 가격이 같다면 무게는 작은 순, 가방의 무게는 큰 순으로 정렬해서 풀어보려 했지만 시간초과, 틀렸습니다를 겪고 방법을 바꿔보았다. 가방과 보석을 모두 오름차순으로 정렬하고, 가방에 담을 수 있으면 우선순위 큐에 다 집어넣는다. 보석이 더 무거워서 담을 수 없으면, 우선순위 큐에서 우선순위가 ..

문제 https://www.acmicpc.net/problem/9466 9466번: 텀 프로젝트 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 www.acmicpc.net 문제풀이 queue와 DFS를 이용해서 풀었다. 테스트 케이스만큼 돌려야 하므로 T를 입력받고 T만큼 해당 작업을 반복한다. 1부터 N까지 숫자를 돌면서 탐색(DFS)을 한다. 다음 번호가 방문을 하지 않았다면, 방문 표시를 하고 큐에 다음 번호를 저장하고 탐색을 한다. 다음 번호가 방문한 번호라면, 순환하는 번호의 시작을 찾아야 하므로 q.front가 다음 번호일 때까지 pop을 한다. 다음 번..

문제 https://www.acmicpc.net/problem/1422 1422번: 숫자의 신 첫째 줄에 K와 N이 공백을 사이에 두고 주어진다. K와 N은 각각 50보다 작거나 같은 자연수이고, N은 K보다 크거나 같다. 둘째 줄에는 K개의 수가 한 줄에 하나씩 주어진다. 각 수는 1,000,000,000보다 www.acmicpc.net 문제풀이 전에 백준에서 풀었던 16496번 문제와 거의 같은 문제이다. 16496번 문제와 다른 점은 입력에 0이 없다는 점과 입력받은 수보다 뽑아야 하는 수가 더 많을 수도 있다는 점이다. 1~9까지는 큰 수가 무조건 좋고, 9와 10 같은 경우도 자릿수가 늘어나므로 어느 수가 들어오든 큰 수를 여러 번 뽑는 것이 좋다. 먼저 숫자를 입력받는다, 만약 숫자가 더 필요..

문제 https://www.acmicpc.net/problem/1826 1826번: 연료 채우기 첫째 줄에 주유소의 개수 N(1 ≤ N ≤ 10,000)가 주어지고 두 번째 줄부터 N+1번째 줄 까지 주유소의 정보가 주어진다. 주유소의 정보는 두개의 정수 a,b로 이루어 져 있는데 a(1 ≤ a ≤ 1,000,000)는 성경 www.acmicpc.net 문제풀이 트럭이 주유소에 도착할 때마다 멈춰야 하는지를 판별하는 것이 아닌, 되돌리기를 한다고 생각하면 된다. 현재 위치에서 갈 수 있는 최대 위치를 구하고, 그 사이의 주유소 중에서 가장 많은 연료를 얻을 수 있는 주유소에 간다. 우선순위 큐를 이용해 갈 수 있는 주유소를 연료의 양 기준으로 내림차순으로 하여 가장 많은 연료를 채운다. 먼저 입력받은 주..