코드카타 주차 요금 계산 문제 이 문제 풀려면 stack, Pair, Map, List, split()의 개념을 알아야한다.(여기서 맵과 리스트는 가변형으로 선언된다.) 배열 다루는 실력 늘리는 문제라고 할 수 있다. 입출력 예시 차량 수 만큼 주차요금을 계산한다. 풀이import kotlin.math.ceilclass Solution { fun solution(fees: IntArray, records: Array): List { val stack = mutableListOf>() // 입차 후 출차기록이 없는 차 리스트 val ptSumMap = mutableMapOf() // 차량별로 누적 주차 시간을 저장할 맵 // 주어진 입/출차 기록을 처리 ..
코드카타 k진수에서 소수 개수 구하기 문제 저 조건들을 요약하자면 n을 k진수로 변환한 숫자에서 추출한 숫자가 0을 포함하지만 않으면 된다는 뜻이다. 풀이class Solution { fun solution(n: Int, k: Int): Int { // 소수 판별 함수 fun isPrime(num: Long): Boolean { if (num 주어진 정수 n을 k진수로 변환한 후, 변환된 각 숫자 그룹에서소수인 숫자들의 개수를 반환하는 로직이다. 조건에 따른 문자열 나누기val arr = kn.split("0").filter { it.isNotEmpty() }1100100 -> [11, , 1, , ] -> [11, 1]여기서 kn은 n을 k진수로 변환한 ..
코드카타 타겟 넘버 문제 해당 문제는 n개의 수로 타겟 넘버를 만들 수 있는 모든 경우의 수를 탐색해야 하며,주어진 숫자의 개수가 그렇게 많지 않기에 완전탐색을 이용하여 풀 수 있다. 가능한 모든 덧셈 및 뺄셈 조합을 탐색해야 하기 때문에 DFS를 써야한다. 입출력 예시 풀이class Solution { fun solution(numbers: IntArray, target: Int): Int { // i는 현재 숫자, sum은 현재까지의 합에 해당한다. fun dfs(i: Int, sum: Int): Int { // 모든 숫자를 사용한 경우, sum이 target과 같으면 방법 수를 1추가 if ..
코드카타 피로도 문제 해당 문제는 주어진 피로도 내에서 탐험할 수 있는 최대 던전수를 반환하는 문제이다.모든 가능한 던전 탐험 경로를 고려해야 하기에 완전탐색으로 풀어야 한다. 제한사항에서 정보 얻기제한사항에서 최대로 주어지는 던전의 개수는 8개라 명시되어있기에, 최악의 경우에도 시간복잡도가 O(8!)밖에 나오지 않는다. 그렇기에 완전 탐색으로 풀어도 시간초과가 나지 않는다. 입출력 예시 입장 피로도 순으로 정렬해서 푼다 => 3번 던전을 못가게 된다.소모 피로도 순으로 정렬해서 푼다 => 1번 던전을 못가게 된다. 배열의 정렬로는 풀 수 없기에 모든 던전 탐험 경로를 다 탐색해야한다. 풀이class Solution { fun solution(k: Int, dungeons: Array): I..
코드카타 프로세스 문제 프로세스의 우선순위에 따라 프로세스를 실행시키고location번째 프로세스가 몇번째로 실행되는지를 반환하는 문제이다.해당 문제는 큐(queue)를 사용하여 쉽게 풀 수 있다. 입출력 예시 우선순위가 높은 프로세스를 기준으로 순차적으로 프로세스를 실행시키면서priorities[location]에 해당하는 프로세스는 몇 번째로 실행되는지 반환하면 된다. 풀이import java.util.*class Solution { fun solution(priorities: IntArray, location: Int): Int { // 큐에 각 프로세스의 (우선순위, 인덱스) 쌍을 저장 val q = LinkedList>() for ((i, ..
코드카타 기능개발 문제 해당 문제는 스택/큐의 개념을 활용해서 풀라고 되어있는데굳이 스택이랑 큐 안써도 풀리는 문제이다. 입출력 예시 각 프로세스마다 배포 일수를 구하고 현재 가장 오래 걸리는 배포 일수가현재 배포 일수보다 클 때와 작을 때의 경우를 구분해서 처리하면 된다. 해당 로직은 가변형 리스트와 맵 컬렉션을 활용하여 구현할 수 있다. 해당 문제에서 맵이 가지는 특징첫번째 테스트 케이스: [7, 9, 3] => {7=1, 9=2}두번째 테스트 케이스: [5, 10, 1, 1, 20, 1] => {5=1, 10=3, 20=2}어떤 기능이 완성되더라도 앞에 있는 모든 기능이 완성되지 않는다면배포가 불가하기에 맵의 키값은 오름차순 형태로 정렬되어있다. 풀이class Solution { fun ..
코드카타 의상 문제 서로 다른 옷의 조합 수를 반환하는 문제이다. 입출력 예시 조합의 개수1) 의상의 종류가 1가지인 경우 (의상 A: a개)코니는 최소 하루에 한 개의 의상은 입는다고 언급이 되어있기에한 가지 종류의 옷을 1번씩 입게되어 a개의 조합이 가능하다. 2) 의상의 종류가 2가지인 경우 (의상 A: a개, 의상 B: b개)의상을 한 가지씩 입는 경우의 수: a + b,의상 2개를 섞어 입는 경우의 수: ab 총, a + b + ab 개의 조합이 가능하다. 3) 의상의 종류가 3가지인 경우 (의상 A: a개, 의상 B: b개, 의상 C: c개)의상을 한 가지씩 입는 경우의 수: a + b + c의상 2개를 섞어 입는 경우의 수: ab + ac + bc의상 3개를 섞어 입는 경우의 수: abc..
코드카타 할인 행사 문제 정현이는 마트의 회원이 되면 그 시점부터 10일 동안 할인을 받을 수 있다. 이 기간 동안 정현이가 원하는 제품과 수량을 모두 맞춰서구매할 수 있는 날짜의 총 일수를 반환해야 한다. 입출력 예시 원하는 제품이 할인하는 날이 없을 땐 0을 반환한다. zip()fun main() { val want = arrayOf("banana", "apple", "rice", "pork", "pot") val number = intArrayOf(3, 2, 2, 2, 1) val wantMap = want.zip(number.toTypedArray()) println(wantMap) // [(banana, 3), (apple, 2), (rice, 2), (pork,..