본문 바로가기

코딩 테스트/Lv.2

(7)
[프로그래머스] 요격 시스템 with Kotlin 문제 A 나라가 B 나라를 침공하였습니다. B 나라의 대부분의 전략 자원은 아이기스 군사 기지에 집중되어 있기 때문에 A 나라는 B 나라의 아이기스 군사 기지에 융단폭격을 가했습니다. A 나라의 공격에 대항하여 아이기스 군사 기지에서는 무수히 쏟아지는 폭격 미사일들을 요격하려고 합니다. 이곳에는 백발백중을 자랑하는 요격 시스템이 있지만 운용 비용이 상당하기 때문에 미사일을 최소로 사용해서 모든 폭격 미사일을 요격하려 합니다. A 나라와 B 나라가 싸우고 있는 이 세계는 2 차원 공간으로 이루어져 있습니다. A 나라가 발사한 폭격 미사일은 x 축에 평행한 직선 형태의 모양이며 개구간을 나타내는 정수 쌍 (s, e) 형태로 표현됩니다. B 나라는 특정 x 좌표에서 y 축에 수평이 되도록 미사일을 발사하며, ..
[프로그래머스] 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 == ..
[프로그래머스] 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 문제 괄호들이 문자열 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
[프로그래머스] N개의 최소공배수 with Kotlin 문제 N개의 숫자가 들의 최소공배수를 구하는 문제 풀이 과정 숫자 2개씩 순차적으로 최소공배수를 구한다. 최소공배수 : A * B / 최대공약수 코드 class Solution { fun solution(arr: IntArray): Int { var answer = arr[0] arr.forEach{ answer = lcm(answer, it) } return answer } //최소 공배수 fun lcm(a:Int, b:Int) = a * b / gcd(a, b) //최대 공약수 fun gcd(a:Int, b:Int):Int{ return if (a < b){ if (a == 0) b else gcd(a, b % a) } else{ if (b == 0) a else gcd(b, a % b) } } }
[프로그래머스] 카펫 with Kotlin 문제 중앙에 노란색, 테두리 갈색 카펫에서 노란색과 갈색 개수만 알고 있을 때, 카펫의 가로 세로 크기를 순서대로 배열에 담아 return 하는 문제 제한 사항 갈색 격자의 수 brown은 8이상 5,000 이하인 자연수 노란색 격자의 수 yellow는 1이상 2,000,000 이하인 자연수 카펫의 가로의 길이는 세로와 같거나 세로보다 길다. 풀이 방법 가로 >= 세로 이므로 세로 길이의 최대는 yellow+brown 값의 제곱근 노란색 가로 = yellow / 세로 노란색 격자를 바탕으로 갈색 격자의 수를 구한 뒤 brown 값과 같으며, yellow % 세로 == 0 이면 카펫의 크기 코드 import kotlin.math.sqrt class Solution { fun solution(brown: I..