본문 바로가기

코딩 테스트

(44)
[프로그래머스] JadenCase 문자열 만들기 with Kotlin 문제 주어진 문자열 s를 다음과 같이 변환하여 반환 시작하는 알파벳은 무조건 대문자 나머지는 소문자 입출력 예 s return "3people unFollowed me" "3people Unfollowed Me" "for the last week" "For The Last Week" 풀이 과정 1. s를 모두 소문자로 변환 2. 첫 시작 또는 공백 다음만 대문자로 입력, 나머지는 소문자 코드 class Solution { fun solution(s: String): String { val string = s.toLowerCase() //소문자로 변환 val sb = StringBuilder() for(i in string){ //시작 부분 또는 이전이 공백이라면 대문자 삽입 if(sb.length == ..
[프로그래머스] 광물 캐기 Lv.2 with Kotlin 문제 다음과 같이 3가지 종류의 곡괭이와 광물이 있다. 각 곡괭이로 광물을 캘 때, 위와 같은 피로도가 소모가 된다. 주어진 광물을 순서대로 캘 때, 최소한의 피로도를 구하는 문제 조건 모든 곡괭이는 각각 5번만 사용 가능하다. 한 번 선택한 곡괭이는 5번 사용할 때까지 바꿀 수 없다. 곡괭이가 모두 소진되거나, 광물을 모두 캐면 종료 풀이 방법 다이아 : 25 , 철 : 5, 돌 : 1 DFS로 모든 경우의 수 확인 피로도 = 현재 광물 / 사용중인 도구 (값이 0이면 1) 코드 class Solution { var answer: Int = 0 val hash = hashMapOf("diamond" to 25, "iron" to 5, "stone" to 1) val tools = hashMapOf(0 ..
[프로그래머스] 디펜스 게임 Lv.2 with Kotlin 문제 n에 현재 나의 병력의 수, enemy 배열에 각 라운드별 적군의 수가 주어진다. 적군의 수만큼 나의 병력을 소모하여 적을 막을 수 있다. 한 라운드를 병력 소모없이 넘어갈 수 있는 무적권 k가 주어진다. 이때, 무적권을 적절히 사용하여 막을 수 있는 최대 라운드를 구하여라 풀이 과정 1. 무적권을 사용하지 않고 가능한 라운드까지 진행 2. 각 라운드별 적군의 수를 저장 -> Heap 자료구조 / Kotlin에서는 PriorityQueue 사용 3. 나의 병력으로 넘어갈 수 없을 때, 현재 적군의 병력과 이전 적군 중 가장 많은 적군을 비교 4. 더 큰 적군에 무적권을 사용 4-1. 현재 적군이 더 많다면 라운드만 증가 4-2 이전 적군이 더 많다면 현재 n에 이전 적군을 더하고 배열에서 삭제, 현..
[프로그래머스] 리코쳇 로봇 LV.2 with Kotlin 문제 주어진 2차원 배열에서 R의 위치에 있는 로봇에 G까지 도달하는데 걸리는 최소 횟수 구하기 조건 1. 로봇은 상하좌우만 움직일 수 있다. 2. D는 벽 3. 막히는 구간까지 미끄러지듯 쭉 가야함 4. 목적지에 도달할 수 없다면 -1 반환 ...D..R .D.G... ....D.D D....D. ..D.... 풀이 과정 1. 이동했던 방향으로 다시 돌아가지 않도록 하기 2. 방문 했던 좌표는 pass 첫번째 시도 (DFS) 이동하는 모든 곳을 확인 테스트는 통과했지만 모든 경우의 수를 확인하는 방법으로 시간 초과 class Solution { val dx = arrayOf(1, -1, 0, 0) val dy = arrayOf(0, 0, -1, 1) var answer: Int = 0 fun move(..
[프로그래머스] 모음사전 with Kotlin 문제 사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다. 단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요. 제한 사항 word의 길이는 1 이상 5 이하입니다. word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다. 풀이 DFS로 탐색하며 answer ++ , word 단어가 나오면 break 후 answer 반환 코드 class Solution { val words = arrayOf('A', 'E'..
[프로그래머스] K진수에서 소수 개수 구하기 with Kotlin 문제 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0처럼 소수 양쪽에 0이 있는 경우 P0처럼 소수 오른쪽에만 0이 있고 왼쪽에는 아무것도 없는 경우 0P처럼 소수 왼쪽에만 0이 있고 오른쪽에는 아무것도 없는 경우 P처럼 소수 양쪽에 아무것도 없는 경우 단, P는 각 자릿수에 0을 포함하지 않는 소수입니다. 예를 들어, 101은 P가 될 수 없습니다. 풀이 K 진수로 변환 후 0을 기준으로 나누면 P만 남는다. 소수인 P의 개수만 구하면 되는 문제 코드 class Solution { fun solution(n: Int, k: Int): Int { var answer: Int = 0 var _..
[프로그래머스] 타겟 넘버 with Kotlin 문제 numbers의 배열의 숫자들을 적절히 더하거나 빼서 타겟 넘버를 만들 수 있는 방법을 반환하는 문제 풀이 방법 완전 탐색 DFS로 풀이 numbers = [1,1,1] 이라면 위와 같이 탐색 코드 class Solution { var answer = 0 fun solution(numbers: IntArray, target: Int): Int { //target 에서 numbers의 값들을 빼거나 더해서 최종 0 이면 answer ++ DFS(target, numbers, 0, numbers.size-1) return answer } fun DFS(target: Int, numbers: IntArray, index: Int, check : Int){ for(i in arrayOf(1, -1)){ v..
[프로그래머스] 괄호 회전하기 with Kotlin 문제 괄호들이 문자열 s에 담겨있으며, 문자열 s를 왼쪽으로 한칸씩 이동시킬 때, 올바른 괄호들만 있는 문자열 s가 몇 개인지 구하는 문제 풀이 과정 StringBuilder() 로 문자열 회전 열림 괄호는 + , 닫힘 괄호는 -로 Map에 저장 후 - 값이 나왔을 때 이전 인덱스의 값과 더해 0이면 정상 괄호 0이 아니면 비정상 코드 class Solution { fun solution(s: String): Int { var answer: Int = 0 val sb = StringBuilder(s) val map : Map = mapOf( Pair('[', 1), Pair(']', -1), Pair('{', 2), Pair('}', -2), Pair('(', 3), Pair(')', -3)) for(i..
[프로그래머스] 귤 고르기 with Kotlin 문제 다양한 크기의 종류의 귤이 있을 때, 귤의 종류를 최소로 하여 N개를 담고 싶어한다. 이 때, 담을 수 있는 최소한의 귤의 종류의 개수를 반환하는 문제 풀이 과정 귤의 종류별 개수를 구한 뒤 개수가 많은 순으로 내림차순 K개에서 빼주면서 카운팅 코드 class Solution { fun solution(k: Int, tangerine: IntArray): Int { var answer: Int = 0 var K = k val list = tangerine.groupBy{it}.values.map{it.size}.sortedDescending() for(i in list){ if(K
[프로그래머스] 멀리 뛰기 with Kotlin 문제 한 번에 1칸 또는 2칸 뛸 수 있으며, 칸이 N으로 주어졌을 때 N까지 뛸 수 있는 모든 경우의 수의 개수를 반환하는 문제 풀이 과정 1칸 : 1 2칸 : 2 3칸 : 3 4칸 : 5 5칸 : 8 다음과 같은 규칙으로 증가하는 피보나치 수이므로 다이나믹 프로그래밍을 사용하여 해결할 수 있다. 코드 class Solution { fun solution(n: Int): Long { if(n == 1) return 1 val dp = Array(n){0} dp[0] = 1 dp[1] = 2 for(i in 2 until n){ dp[i] = (dp[i-1] + dp[i-2]) % 1234567 } return dp[n-1].toLong() } }