f '레벨2' 태그의 글 목록 — 하늘속에서IT

레벨2

    프로그래머스 :: 연습문제 :: 연속된 부분 수열의 합

    풀이 /** * 설명 * - 투 포인터 알고리즘을 사용하여 문제를 풀이하였다. * - 투 포인터 알고리즘은, 구간합을 구할 때 사용한다. * */ 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 ..

    프로그래머스 :: 연습문제 :: 점찍기

    풀이 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 :: 연습문제 :: 롤케이크 자르기

    풀이 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 :: 연습문제 :: 최솟값

    풀이 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 :: 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..