알고리즘
프로그래머스 :: 연습문제 :: 무인도 여행
풀이 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..
프로그래머스 :: 연습문제 :: 귤고르기
풀이 class 귤고르기 { fun solution(k: Int, tangerine: IntArray): Int { var answer: Int = 0 var tmpK = k /** * 알고리즘 아이디어 * - 최소한의 갯수로 귤을 넘겨줘야 된다면 제일 많은 귤의 갯수부터 소진시키자. * * 설명 * - 귤의 크기에 맞게끔 Map 자료구조로 변형 * - 귤의 갯수로 치환한뒤 * - 크기의 역순으로 정렬한다. * * 부연설명 * - kotlin 은 다양한 변형함수를 제공함으로 적절히 사용하면 되겠다.(sorted().reversed() = sortedDescended()) * - 아래 경우에서는 정렬전에 size 로 transformation(map) 하는 과정이 더 빠르겠다 싶었다. * */ // val..
Programmers :: 연습문제 :: 롤케이크 자르기
풀이 class 롤케이크자르기 { fun solution(topping: IntArray): Int { var result = 0 /** * 설명 * - 만약 topping 의 크기가 `1` 이라면 공평하게 나눠 먹을 수 없다. * */ if(topping.size == 1){ return 0 } /** * 설명 * - `철수`와 `철수 동생`이 slicingPoint 를 기준으로 몇가지 종류의 topping 을 가지고 있는지 표현한다. * * @Variable * - 철수 : cs * - 철수 동생 : csBrother * - slicingPoint : `철수`와 `철수 동생`이 공평하게 나눠먹을 수 있는 시점 * */ val csGroup = topping.slice(IntRange(0,0)).toT..
Programmers :: 고득점 kit :: 이중우선순위큐
풀이 class 이중우선순위큐 { /** * 설명 * - 정렬 된다면 가장 큰 값과 가장 작은 값을 인덱스로 찾아 낼 수 있다. * - 따라서 정렬을 시킨 뒤에 해당 원소를 삭제 시킴으로써 해결할 수 있다. * */ fun solution(operations: Array): IntArray { val sortedList = mutableListOf() operations.forEach { operation -> if(operation.contains("I")){ sortedList.add(operation.split(" ")[1].toInt()) sortedList.sort() } else{ if(sortedList.isNotEmpty()){ if(operation == "D 1"){ sortedList..
Programmers :: 2022 tech internship :: 두 큐 합 같게 만들기
풀이 import java.util.* class Solution { fun solution(queue1: IntArray, queue2: IntArray): Int{ var answer = -2 /** * 설명 * - 두큐의 값 교환에 대한, 최악의 수 * * 예 * - 1번큐: [1,1,1...](300,000개) * - 2번큐: [1,1,1..,599999,1](300,000개) * - 위 두큐의 값이 같아지려면 * - 2번큐에서 299,999 번 이동하고 * - 1번큐에서 599.998 번 이동해야 한다. * */ val oneCycleCounts: Long = queue1.size.toLong() * 3 - 3 val firstQueue: Queue = LinkedList(queue1.toMut..
Programmers 완전탐색 :: 레벨2 :: 카펫
풀이 /** * 설명 * - 프로그래머스 > 고득점 kit > 완전탐색 > level2 > 카펫 * - 경로 : https://school.programmers.co.kr/learn/courses/30/lessons/43238 * * */ class Carpet { fun solution(brown: Int, yellow: Int): IntArray{ /** * 로직설명 * - 내부 사각형(노랑타일)의 가로길이를 w, 세로길이를 h 라고 하자. * * - #1 첫번째 조건 * -- 2w + 2h + 4(꼭지점 타일 갯수) = brown * * - #2 두번째 조건 * -- w*h = yellow * * */ // 2w + 2h + 4 = brown // w * h = yellow var yellowWid..
Programmers 이분탐색 :: 레벨3 :: 입국심사
풀이 class Immigration { fun solution(n: Int, times: IntArray): Long{ var answer: Long = 0 times.sort() var start: Long = 0 var end: Long = times.last().toLong() * n /** * 특이점 * - while(start < end) 조건은 왜 불가능할까? * * 예를 통해 알아보자 * n : 6 * times : [7,10] * 만약 start : 28, end: 31 이라고 할때를 가정해보자 * start: 28, end: 31 * mid: 29 * end
Programmers 스택/큐::레벨2::주식가격
풀이 class Solution { public int[] solution(int[] prices) { int[] result; // 주식 데이터가 없을 수 도 있습니다. if(prices.length == 0){ result = new int[]{}; return result; } // 주식 데이터가 하나만 있을 수 도 있습니다. else if(prices.length == 1){ result = new int[]{0}; return result; } // 주식 데이터가 둘 이상일 경우. result = new int[prices.length]; // 현재 비교하고자 하는 주식데이터에 대한 인덱스 int curIdx = 0; // 모든 데이터를 비교했는지 알아보기 위한 조건 while(curIdx < ..