프로그래머스
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 :: 연습문제 :: 최솟값
풀이 import java.util.Arrays; /** * 설명 * - 프로그래머스 > 연습문제 > 최솟값 * - 경로 : https://school.programmers.co.kr/learn/courses/30/lessons/12941?language=java * * */ public class 최솟값 { /** * 설명 * - 제일 큰 수와 제일 작은 수의 곱의 합이 제일 작은 값일 거라는 생각으로 시작 * */ public int solution(int []A, int []B) { int[] sortedArrA = Arrays.stream(A).sorted().toArray(); int[] sortedArrB = Arrays.stream(B).sorted().toArray(); int sum = ..
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 :: 2021 카카오 채용연계형 인턴십 :: 거리두기 확인하기
풀이 /** * 설명 * - 프로그래머스 > 2021 카카오 채용연계형 인턴십 * - 경로 : https://school.programmers.co.kr/learn/courses/30/lessons/81302 * * */ class 거리두기확인하기 { fun solution(places: Array): IntArray{ /** * 로직설명 * - 코테설명 이미지를 보고 힌트를 얻었다. * - 이미지에 따르면 패턴이 존재한다는 것을 알 수 있다. * - 해당 패턴은 예를들면 다음과 같다. "PP", "POP" * */ var answer: IntArray = IntArray(places.size){0} places.forEachIndexed { index, place -> var colPlace = gen..
Programmers :: Summer/Winter Coding(2019) :: 멀쩡한 사각형
풀이 package programmers.summerwinter import kotlin.math.ceil import kotlin.math.floor /** * 설명 * - 프로그래머스 > Summer/Winter Coding(2019) > 멀쩡한 사각형 * - 경로 : https://school.programmers.co.kr/learn/courses/30/lessons/62048 * * */ class FineSquare { /** * 설명 * - 문제에서는 왼쪽위에서 아래 대각선으로 가로지르는데 이는 왼쪽 아래 즉,[0,0](좌표)에서 시작해서 오른쪽 위까지 가로지르는 것과 같은 결과값을 가진다. * - 기울기: h/w, 인 1차 방정식 그래프를 그릴 수 있다는 것을 알 수 있다. * - 그림을 ..
Programmers 동적계획법 :: 레벨3 :: N 으로 표현
풀이 /** * 설명 * - 프로그래머스 > 고득점 kit > 동적계획법 > level3 > N으로 표현 * - 경로 : https://school.programmers.co.kr/learn/courses/30/lessons/42895?language=kotlin * * */ class ExpressedByN { fun solution(N: Int, number: Int): Int{ // 초기 접근 // var answer = 0 // // if(N == number){ // return 1; // } // // val oneTimesUsed = listOf(5) // val twoTimesUsed = listOf(55, 5+5, 5-5, 5*5, 5/5) // val threeTimesUsed = li..
Programmers DFS/BFS :: 레벨 2 :: 게임 맵 최단거리
풀이 package programmers.highscorekit; import javax.xml.soap.Node; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; /** * 설명 * - 프로그래머스 > 고득점 kit > 깊이/너비 우선 탐색(DFS/BFS) > level2 > 게임 맵 최단거리 * - 경로 : https://school.programmers.co.kr/learn/courses/30/lessons/1844?language=java * * */ public class ShortestWayInGa..
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