![](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..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/dqguMh/btsIhuYhoDT/JyQM55zfCa2FJksRUsRcHk/img.png)
코드카타 주차 요금 계산 문제 이 문제 풀려면 stack, Pair, Map, List, split()의 개념을 알아야한다.(여기서 맵과 리스트는 가변형으로 선언된다.) 배열 다루는 실력 늘리는 문제라고 할 수 있다. 입출력 예시 차량 수 만큼 주차요금을 계산한다. 풀이import kotlin.math.ceilclass Solution { fun solution(fees: IntArray, records: Array): List { val stack = mutableListOf>() // 입차 후 출차기록이 없는 차 리스트 val ptSumMap = mutableMapOf() // 차량별로 누적 주차 시간을 저장할 맵 // 주어진 입/출차 기록을 처리 ..