본문 바로가기

728x90

알고리즘

(102)
[백준][KOTLIN] 1149 RGB거리 https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 풀이 위의 그림을 통해서 규칙성을 파악한다. 비용을 저장하는 cost 배열과 R, G, B 를 각각 처음으로 칠한 경우를 저장하는 dp 배열을 선언한다. 코드 import java.util.* fun main(args: Array) { val sc = Scanner(System.`in`) val N = sc.nextInt() val cost = Array(N + 1) { In..
[백준][KOTLIN] 9461 파도반 수열 9461번: 파도반 수열 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 www.acmicpc.net 풀이 주어진 1부터 10까지 결과에 대한 규칙을 찾는다 : P(N) = P(N - 2) + P(N - 3) 입력이 100일 경우 Int Data 범위를 넘어서기 때문에 LongArray 를 배열로 선언한다. 코드 import java.io.* fun main(args: Array) { val br = BufferedReader(InputStreamReader(System.`in`)) val bw = BufferedWriter(OutputStreamWriter(Syst..
[백준][KOTLIN] 1904 01타일 1904번: 01타일 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이 www.acmicpc.net 풀이 문제의 규칙성을 찾는다. N = 1 -> 1 N = 2 -> 2 N = 3 -> 3 N = 4 -> 5 N = 5 -> 8 위의 과정을 봤을 때 피보나치 수열의 규칙을 나타낸다. 각 2진 수열의 개수를 15746 값으로 나눈 나머지를 저장한다. 코드 import java.util.* fun main(args: Array) { val sc = Scanner(System.`in`) val n = sc.nextInt() val dp = IntArray(n + 1) d..
[백준][KOTLIN] 9184 신나는 함수 실행 9184번: 신나는 함수 실행 입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다. www.acmicpc.net 코드 import java.util.* private val dp = Array(21) { Array(21) { IntArray(21)} } fun main(args: Array) { val sc = Scanner(System.`in`) while (true) { val a = sc.nextInt() val b = sc.nextInt() val c = sc.nextInt() if (a == -1 && b == -1 && c == -1) { break } val re..
[백준][KOTLIN] 1003 피보나치 함수 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 풀이 피보나치 수열을 재귀를 이용하여 풀 경우 시간 초과가 발생한다. 동적 프로그래밍(dp) 알고리즘을 이용하여 시간 초과를 해결 한다. 2차원 Int 배열을 선언한다. dp[n][0] 에 0이 나오는 횟수를 저장한다. dp[n][1] 에 1이 나오는 횟수를 저장한다. 코드 import java.util.* private val dp = Array(41) { IntArray(2) } fun main(args: Array) { val sc = Scanner(System.`in`) val T = sc.nextLine().toInt() // 초기 dp 값 dp[0..
[백준][KOTLIN] 18870 좌표 압축 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌 www.acmicpc.net 풀이 좌표를 입력 받는다. 이때 입력 받은 좌표를 정렬할 좌표를 하나 더 선언한다. 정렬된 좌표를 이용하여 좌표 압축 조건을 저장하는 Map Data 를 선언한다. 저장된 Map Data 를 출력 한다. 코드 import java.io.* import java.util.* fun main(args: Array) { val br = BufferedReader(InputStreamReader(System.`in`)) ..
[백준][KOTLIN] 10814 나이순 정렬 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 풀이 나이와 이름을 함께 저장할 수 있는 Data Class 를 선언한다. List에 입력된 나이와 이름을 저장한다. List - sortedWith api 를 이용하여 나이를 기준으로 오름차순 정렬한다. 코드 import java.io.* import java.util.* fun main(ars: Array) { val br = BufferedReader(InputStreamReader(System.`in`)) val n = br.readLine().toInt() v..
[백준][KOTLIN] 1181 단어 정렬 https://www.acmicpc.net/problem/1181 풀이 조건에서 중복을 허용하지 않는 것을 참고하여 Set 을 이용한다. 입력된 문자열을 길이 기준으로 오름 차순 정렬 한다. 문자열의 길이가 같을 때에는 알파벳 순으로 정렬 한다. 2가지 조건을 만족해야 하므로 Kotlin 에서 제공하는 sortedWith api 를 이용하여 정렬 한다. 코드 import java.util.* fun main(ars: Array) { val sc = Scanner(System.`in`) val n = sc.nextInt() val list = mutableSetOf() repeat(n) { list.add(sc.next()) } val result = list.sortedWith { a, b -> when..