코드카타 H-Index 문제 뭔 소린지 모르겠어서 H-index에 대해 따로 찾아봤다. H-index란? 간단하게 설명하자면 피인용 횟수가 논문번호보다 작거나 같아지기 시작하는 수가 H-Index에 해당한다. 입출력 예시 여기서 나는 2가지 반례를 추가해줬다. [0, 0, 0, 0, 0] 첫번째 테스트케이스의 H-index는 0, 두번째는 5에 해당한다. 풀이class Solution { fun solution(citations: IntArray): Int { // 논문 피인용 횟수 배열을 내림차순으로 정렬하여 c에 저장 val c = citations.sortedDescending() // 정렬된 배열 c의 인덱스를 순회 ..
코드카타 연속 부분 수열 합의 개수 문제 주어진 원형 배열의 모든 부분 배열 합을 구하는 문제이다. 입출력 예시 2중 for문을 돌려 모든 부분 수열의 합을 구하고 중복되는 값을 제거해줘야 한다. 풀이class Solution { fun solution(elements: IntArray): Int { // 부분배열 합의 중복을 제거하기 위해 가변형 set 선언 val set = mutableSetOf() // 이중 for문을 통한 부분 배열 생성 for (i in 1..elements.size) for (j in elements.indices) { var sum = 0 ..
코드카타 괄호 회전하기 문제 올바른 괄호 문자열은 여는 괄호 앞에 닫는 괄호가 위치하면 안되고,여는 괄호가 문자열에 존재한다면 그 괄호의 모양과 일치하는 닫는 괄호도 존재해야 한다. 입출력 예시 주어진 괄호 문자열을 순회하며 회전을 진행한 괄호 문자열이올바른 괄호 문자열인지 판별하는 로직이 필요하다. 풀이class Solution { // 괄호의 짝이 맞는지 검사하기 위해 괄호 맵 선언 val bracketMap = mapOf('(' to ')', '[' to ']', '{' to '}') // 괄호 문자열(Bracket String)이 올바른 형태인지 검사하는 함수 fun isBsValid(rs: String): Boolean { val stack = mu..
코드카타 귤 고르기 문제 k개의 귤을 모으기 위해 선택해야 하는 최소 그룹 수를 계산하는 문제이다. 입출력 예시 이걸 보자마자 같은 숫자끼리 그룹화를 해야겠다는 생각이 들었다. 풀이class Solution { fun solution(k: Int, tangerine: IntArray): Int { // 귤의 크기에 따라 그룹화를 진행 var tanMap = tangerine.groupBy { it } // 각 그룹의 크기를 배열에 추출 val arr = tanMap.entries.flatMap { listOf(it.value.size) } var res = 0 // 선택된 그룹의 수 var sum = 0 ..
코드카타 멀리 뛰기 문제 n개의 칸이 주어졌을 때 끝에 도달할 수 있는 경우의 수 구하기 점화식 찾기n = 0 | 0n = 1 | (1) -> 1n = 2 | (1, 1) (2) -> 2n = 3 | (1, 1, 1), (1, 2), (2, 1) -> 3n = 4 | (1, 1, 1, 1), (1, 1, 2), (1, 2, 1), (2, 1, 1), (2, 2) -> 5n >= 3 일 때, 점화식은 f(n) = f(n − 1) + f(n − 2)에 해당한다.해당 점화식은 피보나치 수열에 해당한다. 풀이class Solution { fun solution(n: Int): Int { // n이 0 ~ 2일 때의 초기 반환값 설정 var arr = mutableListOf..
코드카타 N개의 최소공배수 문제 주어진 배열의 모든 요소에 대한 최소공배수를 계산하는 문제 풀이class Solution { fun solution(arr: IntArray): Int { fun gcd(a: Int, b: Int): Int { val r = a % b if (r == 0) return b else return gcd(b, r) } fun lcd(a: Int, b: Int): Int { return a * b / gcd(a, b) } var res = arr[0] for (i in arr) { res = lcd(..
코드카타 예상 대진표 문제 입출력 예시 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) , (..