![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/I08jb/btsIuIhGv2R/qRXYQtjzqirZO6tRH5zH6K/img.png)
코드카타 소수 찾기 문제 numbers의 최대길이는 7이므로 조합 가능한 모든 수를 생성해도 시간초과가 나지 않는다. 입출력 예시 주어진 수를 각 자리수별로 나누고 가능한 모든 조합을 생성한 뒤중복을 제거하기 위해 집합에다 추가한다. 생성한 집합의 요소 중 소수에 해당하는 개수를 반환한다. "17" -> [1, 7] -> [1, 7, 17, 71] -> [7, 17, 71] -> 3"011" -> [0, 1, 1] -> [0, 1, 11, 10, 101, 110] -> [11, 101] -> 2위와 같은 과정을 통해 주어진 수에서 만들 수 있는 소수개수를 반환한다. 조합 생성 함수// str: 현재까지 생성된 숫자 문자열 // remaing: 아직까지 사용되지 않은 문자들private fun getC..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cxz4cl/btsIqVixzTD/5iNzVkV3OWYlKkuAgWUeU0/img.png)
코드카타 가장 큰 수 문제 numbers의 최대 길이는 100,000이기에 주어진 수에서가능한 모든 순열을 만드는 방법은 시간초과를 발생시킨다. 입출력 예시 [0, 0, 0], 0 풀이class Solution { fun solution(numbers: IntArray): String { var res = numbers.map { it.toString() } .sortedWith { a, b -> (b + a).compareTo(a + b) } .joinToString("") return if (res[0] == '0') "0" else res }}정수를 이어붙이기 위해 정수를 모두 문자열로 변환..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/mBoXi/btsIrvWYlNC/lE7xcuxhQSJUwNSv4u90fk/img.png)
코드카타 다리를 지나는 트럭 문제 테스트 케이스를 보면 트럭은 1초에 1칸씩 이동한다는 사실을 알 수 있다. 입출력 예시 모든 트럭의 합이 다리가 버틸 수 있는 무게 이하라면 반환값은 (다리 길이 + 트럭 개수)에 해당한다. 풀이class Solution { fun solution(bridge_length: Int, weight: Int, truck_weights: IntArray): Int { val bridgeQ = LinkedList() // 다리 위에 있는 트럭(무게) val distanceQ = LinkedList() // 각 트럭이 다리를 건너기까지의 남은 거리 var weightSum = 0 // 현재 다리 위에 있는 트럭들의 무게합 ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bsMxYq/btsIpAysWIq/Xc2iQ34r85JKy71kGzYcK1/img.png)
코드카타 2개 이하로 다른 비트 문제 비트는 십진수를 이진수로 변환한 값에 해당한다. 주어진 수 x의 비트와 비트가 1~2개 다른 수들 중에서 제일 작은 수를 찾아야 하는데 이때 그 수는 x보다 큰 값을 가진다. 입출력 예시 numbers의 요소는 x에 해당하며 result의 요소는 f(x)에 해당한다. 시간 복잡도를 고려하지 않은 풀이class Solution { // 앞에 0을 붙여 두 2진수의 길이를 같게 만듬 private fun makeSameLen(beat1: String, beat2: String): Pair { var maxLen = maxOf(beat1.length, beat2.length) val padBeat1 = beat1.padStart(ma..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/84a7A/btsImFGAAqQ/okfqmRKKlfJP8TTDDIiDfk/img.png)
코드카타 숫자 변환하기 문제 입출력 예시 x를 y로 만드는 최소 횟수를 구하는 문제이므로 bfs의 개념을 활용해야 한다. 풀이import java.util.*class Solution { fun solution(x: Int, y: Int, n: Int): Int { // 큐와 방문표시를 선언하고 초기값 설정 val q = LinkedList(listOf(Pair(x, 0))) val v = mutableListOf(x) // 너비 우선 탐색 while (q.isNotEmpty()) { // 각 변수는 현재 탐색 중인 노드, 연산 횟수에 해당함 val (current, res) = q.remove(..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/712TK/btsIpwJJ46s/JuwyyfFH7H62tNiXLaD4n1/img.png)
코드카타 롤케이크 자르기 문제 롤케이크를 반으로 잘랐을 때 토핑 종류수가 같은 경우의 수를 구하는 문제이다. 입출력 예시 토핑개수가 아주 많을 때의 경우도 고려해야 한다. 시간초과 풀이class Solution { // 토핑 종류 수 반환 함수 private fun tNum(list: List): Int { return list.groupBy { it }.keys.size } fun solution(topping: IntArray): Int { var res = 0 // 토핑의 길이만큼 반복하여 롤케이크를 자른다 for (i in topping.indices) { // 왼쪽 롤케이크의 초기 길..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cv5M6x/btsItnkDexm/rOLo6wkbJlKXreNcIMzR5k/img.png)
코드카타 뒤에 있는 큰 수 찾기 문제 풀이class Solution { fun solution(numbers: IntArray): IntArray { // 결과를 저장할 배열로, 모든 요소의 초기값을 -1로 설정 val res = IntArray(numbers.size) { -1 } // 인덱스를 저장할 스택 초기화 val stack = mutableListOf() // 주어진 정수 배열의 각 요소를 순회 for (i in numbers.indices) { // 스택이 비어있지 않고, 스택의 마지막 인덱스가 가리키는 숫자가 // 현재 숫자보다 작을 경우, 해당 인덱스의..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/oOoS5/btsIkbxwo2X/yybw99EP33wZBor75OVbA1/img.png)
코드카타 모음사전 문제 입출력 예시 각 자리의 가중치 구하기5번째 자리: 1 4번째 자리: 1 x 5 + 1 = 63번째 자리: 6 x 5 + 1 = 312번째 자리: 31 x 5 + 1 = 1561번째 자리: 156 x 5 + 1 = 781다섯번째(마지막) 자리에서 각 문자가 올 수 있는유일한 경우는 자기 자신 뿐이므로 가중치가 1에 해당한다. 각 자리의 가중치는 이전 자리에서 가능한 모든 조합의 수를 반영한다. 각 자리의 가중치를 계산할 때 1을 더해주는 이유는특정 자리의 문자 위치를 포함하기 위해서이다. weight[n] = 5 x weight[n-1] + 1따라서, n번째 자리의 가중치를 구하는 공식은 위와 같다. 풀이class Solution { fun solution(word: St..