sggnology
하늘속에서IT
sggnology
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • Algorithm (31)
      • Programmers (27)
      • Baekjoon (4)
    • WIKI (4)
      • VirtualBox (1)
      • Power Toys (1)
    • NodeJS (4)
      • nvm (1)
      • React (1)
      • Vue (1)
    • Dev Language (3)
      • Java (2)
      • Kotlin (1)
    • Spring Boot (17)
      • Gradle (1)
      • JPA (3)
    • DB (4)
      • MariaDB (3)
      • Redis (0)
    • Android (6)
      • Debug (3)
    • Nginx (3)
      • Debug (1)
    • Intellij (0)
    • Network (1)
    • Git (2)
      • GitHub (2)
    • Chrome Extension (0)
    • ETC (5)
      • Monitoring (2)
    • Linux (1)
      • WSL (1)
    • Visual Studio (1)
    • Side Project (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 프로그래머스
  • DB
  • 오블완
  • Android Studio
  • 고득점KIT
  • 안드로이드 스튜디오
  • mariadb
  • kotlin
  • spring boot
  • nginx
  • 레벨3
  • 레벨2
  • 연습문제
  • 고득점 Kit
  • 알고리즘
  • 백준
  • java
  • docker
  • 티스토리챌린지
  • JPA

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sggnology

하늘속에서IT

Programmers :: 연습문제 :: 우박수열 정적분
Algorithm/Programmers

Programmers :: 연습문제 :: 우박수열 정적분

2022. 11. 7. 00:44
728x90

풀이

import kotlin.math.absoluteValue

class 우박수열_정적분 {
    fun solution(k: Int, ranges: Array<IntArray>): 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<IntArray>, sizes: List<Double>): List<Double>{

        val solution = mutableListOf<Double>()

        for(range in ranges){
            val x1 = range[0]
            val x2 = hailLength - 1 + range[1]

            if(x1 == x2){
                solution.add(0.0)
            }
            else if(x2 < x1){
                solution.add(-1.0)
            }
            else{
                solution.add(
                    sizes.slice(IntRange(x1 , x2 - 1)).sum()
                )
            }
        }

        return solution
    }

    /**
     * 설명
     * - 우박수열이 적용된 값들의 단위가 1인 범위들의 너비 list
     * */
    fun calcSizeOfHail(elements: List<Double>): List<Double>{
        val sizeOfHails = mutableListOf<Double>()

        for(index in 0 until elements.size - 1){

            val d1 = elements[index]
            val d2 = elements[index + 1]

            val size = calcHalfRectangle(d1, d2) + calcRectangle(d1, d2)

            sizeOfHails.add(size)
        }

        return sizeOfHails
    }

    /**
     * 설명
     * - 너비가 1, 높이가 d1,d2 둘의 차이만큼을 가지는 사각형의 크기
     * */
    fun calcHalfRectangle(d1: Double, d2: Double): Double{
        return ((d2 - d1)/2).absoluteValue
    }

    /**
     * 설명
     * - 너비가 1, 높이가 d1,d2 둘중 작은값을 가지는 사각형의 크기
     * */
    fun calcRectangle(d1: Double, d2: Double): Double{
        if(d1 < d2){
            return d1
        }
        return d2
    }

    /**
     * 설명
     * - 우박수열에 따른 결과값 list
     * */
    fun hailSequence(num: Double): List<Double>{

        val hailList = mutableListOf<Double>()
        var tmpNum = num

        while(true){

            if(tmpNum == 1.0) break

            if(tmpNum % 2 == 1.0){
                tmpNum = processOdd(tmpNum)

                hailList.add(tmpNum)
            }
            else{
                tmpNum = processEven(tmpNum)

                hailList.add(tmpNum)
            }
        }

        hailList.add(0, num)

        return hailList

    }

    /**
     * 설명
     * - 우박수열 짝수 접근시 계산법
     * */
    fun processEven(even: Double): Double{
        return even/2.0
    }

    /**
     * 설명
     * - 우박수열 홀수 접근시 계산법
     * */
    fun processOdd(odd: Double): Double{
        return (odd * 3) + 1
    }
}

출처

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


풀이 github

 

GitHub - sggnology/programmers-algorithm: 프로그래머스 알고리즘 코드 정리입니다.

프로그래머스 알고리즘 코드 정리입니다. Contribute to sggnology/programmers-algorithm development by creating an account on GitHub.

github.com

 

728x90

'Algorithm > Programmers' 카테고리의 다른 글

프로그래머스 :: 연습문제 :: 연속 부분 수열 합의 개수  (0) 2022.11.18
프로그래머스 :: 연습문제 :: 숫자 카드 나누기  (0) 2022.11.11
Programmers :: 고득점 kit :: DFS/BFS :: 단어변환  (2) 2022.10.30
Programmers :: 연습문제 :: 롤케이크 자르기  (0) 2022.10.24
Programmers :: 고득점 kit :: 이중우선순위큐  (0) 2022.09.21
    'Algorithm/Programmers' 카테고리의 다른 글
    • 프로그래머스 :: 연습문제 :: 연속 부분 수열 합의 개수
    • 프로그래머스 :: 연습문제 :: 숫자 카드 나누기
    • Programmers :: 고득점 kit :: DFS/BFS :: 단어변환
    • Programmers :: 연습문제 :: 롤케이크 자르기
    sggnology
    sggnology
    하늘은 파란색이니까 내 삶도 파란색이길 ㅎㅎ

    티스토리툴바