코드카타 예상 대진표 문제 입출력 예시 A: 4 -> 2 -> 1, B: 7 -> 4 -> 2 풀이class Solution { fun solution(N: Int, A: Int, B: Int): Int { var a = A var b = B var res = 0 while (a != b) { // 각 라운드에서 다음번호로 변경 (부전승 처리) a = (a + 1) / 2 b = (b + 1) / 2 res++ } return res }}번호의 규칙성을 찾아 아래에서 위로 올라가면서 번호를 초기화 하는 방식으로 구현했다. 1..
코드카타 카펫 문제 카펫은 갈색 타일이 노란색 타일을 둘러싼 형태여야 한다. 갈색 타일 수와 노란색 타일 수가 매개변수로 주어질 때해당 카펫의 가로, 세로 크기를 리스트 담아 반환하는 문제이다. 제한 사항 카펫의 가로 길이는 세로길이보다 같거나 길다고 언급되어있다. 입출력 예시 카펫의 크기가 n * m 일 때, brown은 2(n + m) - 4의 값을 가진다.이는 올바른 카펫 형태를 검사하는 조건에 해당한다. 풀이 과정해당 문제를 해결하려면 (가로, 세로)형태의 경우의 수를 찾아야한다.가로와 세로를 곱한 값은 총 타일 개수에 해당한다. 만약에 brown = 10, yellow = 2 라고 했을 때 12의 약수를 구해 짝을 지으면(1, 12) , (2, 6) , (3, 4) , (4, 3) , (..
코드카타 피보나치 수 문제 n은 2 ~ 100,000 범위에 해당하는 값이라고 언급되어 있으므로피보나치 수를 구하는 함수에서 n이 0인 경우는 고려하지 않아도 되며.시간 복잡도를 고려하여 피보나치 함수를 짜야한다. 재귀함수 이용class Solution { fun solution(n: Int): Int { fun fibo(n: Int): Int { if (n == 1 || n == 2) return 1 else return fibo(n - 1) + fibo(n - 2) } return fibo(n) % 1234567 }}피보나치 수열을 재귀를 사용해서 구하게 되면각 호출마다 fibo(n-1)과 fibo(n-2)을 ..
코드카타 이진 변환 반복하기 문제 풀이class Solution { fun solution(s: String): List { var res1 = 0 // 이진 변환 횟수 var res2 = 0 // 제거된 0의 개수 var str = s // 입력 문자열을 현재 문자열로 초기화 while(str != "1"){ // 현재 문자열에서 0의 개수를 세고 이를 res2에 추가 val zeroCnt = str.count{it == '0'} res2 += zeroCnt // 남은 문자열의 길이를 이진수로 변환한 문자열을 현재 문자열로 갱신 ..
코드카타 JadenCase 문자열 만들기 문제 풀이class Solution { fun solution(s: String): String { return s.split(" ").joinToString(" ") { it.toLowerCase().capitalize() } }}문자열을 람다문을 실행시킬 수 있는 형태로 바꿔주고각 요소를 전부 소문자로 변경한 뒤 첫글자만 대문자로 바꿔준다. 문자열에서 람다문 사용을 가능하게 하기s.split(" ").joinToString(" ")은 s와 반환결과는 같지만전자의 구문에서는 joinToString 함수에 람다식을 전달하여각 단어에 대해 변환 작업을 수행할 수가 있게 된다. capitalize()fun main() { val s =..
코드카타 최댓값과 최솟값 문제 오늘은 좀 쉬어가는 느낌인가보다. 풀이class Solution { fun solution(s: String): String { // 문자열을 공백을 기준으로 나눈 뒤 그 문자열 요소를 정수로 변환한 리스트 생성 val s = s.split(" ").map { it.toInt() } // 결과 리스트에 s의 최소값과 최댓값을 요소로 넣고 val res = listOf(s.minOrNull(), s.maxOrNull()) return res.joinToString(" ") // 공백을 포함한 문자열로 반환 }}문자열을 리스트로 변환하여 다루는 문제이다. split의..
코드카타 신고 결과 받기 문제 신고한 유저에게 날라갈 정지메일 수의 리스트를 반환하는 문제이다.동일한 유저에 대한 신고 횟수는 1회로 처리되므로 신고 내역 리스트는 중복처리가 필요하다. 테스트케이스 따로 추가할 테스트케이스는 없는 것 같다. 풀이class Solution { fun solution(id_list: Array, report: Array, k: Int): List { // 동일한 유저에 대한 신고는 한 번으로 제한되므로 중복된 신고내역 제거 var reportSet = report.toSet() // 신고당한 유저들을 저장할 맵 (키: 신고 당한 사람, 값: 신고 당한 횟수) var reportMap = mutableMapOf..
코드카타 공원산책 문제 시작지점에서 주어진 방향으로 이동해 도착한 지점을 반환하는 문제이다. 입출력 예시 이동 중에 장애물이 있거나 공원을 빠져나왔다면 해당 이동명령은 실행하지 않는다. 테스트케이스 추가입력값 > ["XXX", "XSX", "XXX"], ["E 2", "S 3", "W 1"]출력값 > [1, 1]시작위치의 Y 좌표값이 0이 아닐수도 있음을 고려해야한다. 풀이class Solution { fun solution(park: Array, routes: Array): List { // 시작 위치 찾기 val sY = park.indexOfFirst { it.contains('S') } // 'S'가 있는 행 찾기 val sX = park[sY..