본문 바로가기

코틀린29

백준 - 11123 양 한마리... 양 두마리... (코틀린) [문제] https://www.acmicpc.net/problem/11123 11123번: 양 한마리... 양 두마리... 얼마전에 나는 불면증에 시달렸지... 천장이 뚫어져라 뜬 눈으로 밤을 지새우곤 했었지. 그러던 어느 날 내 친구 광민이에게 나의 불면증에 대해 말했더니 이렇게 말하더군. "양이라도 세봐!" www.acmicpc.net [풀이] 전형적인 bfs 문제이다. 서로 다른 연결성분의 개수를 찾는 문제로 각 좌표를 돌면서 방문하지 않은 양의 좌표일 때 1씩 카운트해주고 bfs를 돌면서 같은 연결성분의 양은 방문하면 쉽게 답을 찾을 수 있다. [코드] import java.lang.StringBuilder import java.util.* private var t = 0 private var h.. 2022. 4. 5.
백준 - 2961 도영이가 만든 맛있는 음식 (코틀린) [문제] https://www.acmicpc.net/problem/2961 2961번: 도영이가 만든 맛있는 음식 첫째 줄에 재료의 개수 N(1 ≤ N ≤ 10)이 주어진다. 다음 N개 줄에는 그 재료의 신맛과 쓴맛이 공백으로 구분되어 주어진다. 모든 재료를 사용해서 요리를 만들었을 때, 그 요리의 신맛과 쓴맛은 www.acmicpc.net [풀이] 완전탐색 문제이다. 재귀를 이용해서 푸는데 음식을 저장한 배열의 인덱스를 재귀의 인수로 넘겨주면서 해당하는 인덱스의 음식을 더하거나 더하지 않거나 하여 재귀를 돌리고 인덱스가 음식의 수와 같아지는 조건에 음식들의 신 맛과 쓴 맛을 구하여 차이가 가장 작은 값을 구하면 된다. 시간복잡도 : O(2^N) [코드] import java.util.ArrayList .. 2022. 4. 5.
백준 - 14916 거스름돈 (코틀린) [문제] https://www.acmicpc.net/problem/14916 14916번: 거스름돈 첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다. www.acmicpc.net [풀이] n이 5의 배수이면 5로 나눈 몫을 반환하고 그렇지 않으면 2를 빼준다. 다시 5의 배수인지 확인하고 그렇지 않으면 2를 뺴준다. 5의 배수인지 확인하고 맞으면 우선적으로 5로 나눠주는 작업을 하기 때문에 그리디알고리즘으로 푼다고 볼 수 있다. 시간복잡도 : O(N) [코드] private var n = 0 private var result = 0 fun main() { val br = System.`in`.bufferedReader() n = br.readLine().toInt() while(n .. 2022. 4. 4.
백준 - 20291 파일 정리 (코틀린) [문제] https://www.acmicpc.net/problem/20291 20291번: 파일 정리 친구로부터 노트북을 중고로 산 스브러스는 노트북을 켜자마자 경악할 수밖에 없었다. 바탕화면에 온갖 파일들이 정리도 안 된 채 가득했기 때문이다. 그리고 화면의 구석에서 친구의 메시지를 www.acmicpc.net [풀이] 문자열 문제이지만 문자열 처리 자체는 각 입력의 확장자만 알아내면 되기 때문에 split 함수로 구할 수 있다. 확장자를 키로 하고, 해당 확장자의 입력 횟수를 키의 값으로 해시에 저장하면 구할 수 있지만 사전순으로 출력을 해야하기 때문에 정렬이 가능한 TreeMap을 이용했다. 사전순이기 때문에 정렬에 대한 추가 코드가 필요없지만 내림차순이 필요할 땐 Iterator를 써줘서 찾아 낼.. 2022. 3. 30.
백준 - 2636 치즈 (코틀린) [문제] https://www.acmicpc.net/problem/2636 2636번: 치즈 첫째 줄에는 사각형 모양 판의 세로와 가로의 길이가 양의 정수로 주어진다. 세로와 가로의 길이는 최대 100이다. 판의 각 가로줄의 모양이 윗 줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진 www.acmicpc.net [풀이] 치즈의 깊숙한 정도마다 차이가 있는 것이 아니기 때문에 치즈가 있는 부분에 바로 bfs를 통해 치즈가 녹을 경과일을 구할 수 없다. 치즈의 가장자리 부분만 먼저 체크를 하고 경과일을 저장하고, 그 가장자리 부분 탐색이 끝나면 그 다음 안 쪽 부분을 체크를 하고 경과일+1을 저장하는 식으로 접근했다. 판의 가장자리는 무조건 치즈가 없기 때문에 (0,0)에서 치즈 가장자리를 구하는 bfs를 .. 2022. 3. 29.
백준 - 2606 바이러스 (코틀린) [문제] https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net [풀이] 1번이 속한 연결성분의 정점 수를 구하면 된다. 바이러스에 감염된 컴퓨터 수이기 때문에 1번 컴퓨터를 정점수에서 빼주거나 애초에 더하지 않는 식으로 계산한다. 입력받을 때 각 인덱스마다의 연결리스트를 채워주고 bfs를 이용해서 1번 정점에서 출발하여 탐색을 하면서 갯수를 누적합산하여 구할 수 있다. 시간복잡도 : 연결리스트를 이용한 bfs의 시간복잡도는 O(V+E)이므로 문제에서도 최.. 2022. 3. 29.