프로그래머스
프로그래머스 :: 연습문제 :: 연속된 부분 수열의 합
풀이 /** * 설명 * - 투 포인터 알고리즘을 사용하여 문제를 풀이하였다. * - 투 포인터 알고리즘은, 구간합을 구할 때 사용한다. * */ class 연속된_부분_수열의_합 { fun solution(sequence: IntArray, k: Int): IntArray { val answerList = mutableListOf() var sum = sequence.first() var start = 0 var end = 0 val sequenceSize = sequence.size while(end < sequenceSize){ /** * 설명 * - end가 sequenceSize와 같아졌을 때 sum이 k보다 작으면 더 이상 계산할 필요가 없다. * */ if(end == sequenceSize..
프로그래머스 :: 연습문제 :: 무인도 여행
풀이 class 무인도여행 { fun solution(maps: Array): IntArray { val answer = mutableListOf() val width = maps[0].length val height = maps.size val visited = Array(height) { IntArray(width) { 0 } } lateinit var twoDimensionTargetIndex: Pair /** * 설명 * - 지도의 모든 부분을 탐색한다. * * 동작예시 * - 조건1 : 방문하지 않은 곳 * - 조건2 : 섬인곳 * - 위 두 조건을 만족할때 dfs 를 통해 인접한 섬에 대한 음식의 갯수를 추출한다. * */ for (rowIndex in 0 until height) { for ..
프로그래머스 :: 연습문제 :: 테이블 해시 함수
풀이 class 테이블_해시_함수 { fun solution(data: Array, col: Int, row_begin: Int, row_end: Int): Int { val sortedTuples = getSortedTuples(data, col, row_begin, row_end) val modValues = getModValues(sortedTuples, row_begin) val xorOperatedValue = getXorOperatedValue(modValues) println(xorOperatedValue) return xorOperatedValue } /** * 설명 * - 문제의 규칙에 따라 튜플을 정렬한다. * - row_begin, row_end 까지 배열을 잘라낸다. * */ pri..
프로그래머스 :: 연습문제 :: 혼자 놀기의 달인
풀이 class 혼자놀기의달인 { fun solution(cards: IntArray): Int { var answer = 0 /** * Parameters * - visited : cards 중 방문 기록용 * - numberOfCasesForNumberGroups : cards 중에서 `그룹`이 될 수 있는 경우의 수 * */ val visited = BooleanArray(cards.size){false} val numberOfCasesForNumberGroups = mutableListOf() /** * 설명 * - cards 중에서 방문하지 않은 index 추출 * -- 만약 모두 방문했다면(==-1) 모든 경우의 수를 확인했음으로 iteration 종료 * - 경우의 수 세팅(groupOfCa..
프로그래머스 :: 연습문제 :: 점찍기
풀이 import kotlin.math.* class 점찍기 { fun solution(k: Int, d: Int): Long { var count = 0L val dPowered = power(d) for(x in (0 .. d step k)){ count += getMaxYCoordinatesCounts(dPowered-power(x), k) } return count } /** * 설명 * - Math 패키지를 사용하고 싶지 않아서 만든 Math.pow 대체 함수 * - 문제에서 d 를 제곱하면 int 의 범위를 넘어감으로 Long 으로 반환하게끔 구현 * * 주의사항 * - `틀리게 된 함수` 사용시 `number * number`의 연산이 먼저 일어남으로 int 의 범위를 넘어가게되면 음수가 되..
프로그래머스 :: 연습문제 :: 귤고르기
풀이 class 귤고르기 { fun solution(k: Int, tangerine: IntArray): Int { var answer: Int = 0 var tmpK = k /** * 알고리즘 아이디어 * - 최소한의 갯수로 귤을 넘겨줘야 된다면 제일 많은 귤의 갯수부터 소진시키자. * * 설명 * - 귤의 크기에 맞게끔 Map 자료구조로 변형 * - 귤의 갯수로 치환한뒤 * - 크기의 역순으로 정렬한다. * * 부연설명 * - kotlin 은 다양한 변형함수를 제공함으로 적절히 사용하면 되겠다.(sorted().reversed() = sortedDescended()) * - 아래 경우에서는 정렬전에 size 로 transformation(map) 하는 과정이 더 빠르겠다 싶었다. * */ // val..
프로그래머스 :: 연습문제 :: 연속 부분 수열 합의 개수
풀이 class 연속_부분_수열_합의_개수 { fun solution(elements: IntArray): Int { val sequentialSet = mutableSetOf() /** * 수도 코드 * * list = [ * elements[0], ... , elements[4], * elements[0] + elements[1], ... , elements[4] + elements[0], * ... * ] * */ getSolution(sequentialSet, elements) return sequentialSet.size } /** * 설명 * - 회전 수열은 그것의 크기(길이)로 인해 다른 값이 나온다. * - 마지막 값은 전체의 합과 동일하기에 모두 같은 값이 됨으로 하나만 계산한다. * *..
프로그래머스 :: 연습문제 :: 숫자 카드 나누기
풀이 package programmers.test import kotlin.math.sqrt class 숫자카드나누기 { fun solution(arrayA: IntArray, arrayB: IntArray): Int { val answerList = mutableListOf() /** * 설명 * - 철수와 영희가 가진 숫자카드의 최대공약수를 구한다. * - 각자의 공약수로 상대방의 숫자카드가 안나뉘어지는지 확인한다. * - 안나뉘어진다면 `answerList`의 원소로 추가한다. * * - 만약 `answerList`의 크기가 0 이라면 조건에 해당하는 경우가 없음으로 `0`을 return 한다. * - 그게 아니라면 `answerList`의 수중 가장 큰 수를 return 한다. * */ val g..
Programmers :: 연습문제 :: 우박수열 정적분
풀이 import kotlin.math.absoluteValue class 우박수열_정적분 { fun solution(k: Int, ranges: Array): DoubleArray { val hailElements = hailSequence(k.toDouble()) val hailSizes = calcSizeOfHail(hailElements) val answer = getSolution(hailElements.size, ranges, hailSizes) return answer.toDoubleArray() } fun getSolution(hailLength: Int, ranges: Array, sizes: List): List{ val solution = mutableListOf() for(range..
Programmers :: 고득점 kit :: DFS/BFS :: 단어변환
풀이 class Solution { fun solution(begin: String, target: String, words: Array): Int { val answerList = mutableListOf() /** * 설명 * - target 이 words 에 포함되지 않는다면 해결방법은 없을것이다. * */ if(words.contains(target).not()){ return 0 } val visited = BooleanArray(words.size){false} DFS(begin, target, answerList, words, visited, 0) return answerList.minOf { it } } private fun DFS(cmpValue: String, target: String..