코드카타 행렬의 곱셈 문제 해당 문제는 행렬의 내적을 구하는 문제이다. 입출력 예시 행렬의 내적에 대한 개념을 알아야 해당 입출력 예시를 이해할 수 있다. 행렬의 내적을 구할 수 있는 조건(m x k) · (k x n) = (m x n)행력을 내적을 구하려면 두 행렬의 모양이 맞아야 가능하다.(첫번째 행렬의 열 크기와 두 번째 행렬의 행 크기가 같아야 한다는 뜻) 제한 조건에 곱할 수 있는 배열만 주어진다고 언급되어 있기에주어진 두 배열로 행렬의 내적을 구할 수 있는지 검사하는 로직은 짤 필요없다.(그렇지만 테스트 케이스의 이해를 돕기 위해서 언급하였다.) 행렬 요소 구하기 행렬 A, B가 주어졌을 때, 두 행렬의 내적 C의 요소는 다음과 같이 정의된다. 저 식에서 시그마 기호(Σ)는 i의 값이..
코드카타 n^2 배열 자르기 문제 문제 설명에는 규칙에 따라 2차원 배열을 만들고 평탄화 한 다음그 배열의 left ~ right 번지수에 해당하는 요소를 담은 배열을 반환하라고 하는데이 방식대로 문제를 풀면 메모리 초과가 발생하게 된다. 입출력 예시 이것만 봐서는 이해가 어려운데 그래서 밑에 움짤로 설명이 추가되어있다. 이걸 보면 입출력 예시의 이해가 가능하다. 2차원 배열의 규칙 파악// n이 3일때 (3x3 행렬일 때)(1,1) = 1 (1,2) = 2 (1,3) = 3(2,1) = 2 (2,2) = 2 (2,3) = 3(3,1) = 3 (3,2) = 3 (3,3) = 3각 좌표 x, y 값 중 큰 값이 배열 요소의 값이 되는 규칙이 있다. 배열 평탄화 하기fun main() { va..
코드카타 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(..