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)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sggnology

하늘속에서IT

Algorithm/Programmers

Programmers 이분탐색 :: 레벨3 :: 입국심사

2022. 7. 14. 01:39
728x90

풀이

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 <- mid - 1
         * answer <- 29
         * ---------------
         * start: 28, end: 28 임으로
         * while(start < end) 조건에 의해 while 문을 탈출하게 된다.
         *
         * 결론
         * - 우리는 구할 수 있는 최소값을 구하려고 하기 떄문에 등호가 포함된 부등호를 사용해야 한다.
         * - 위 예에서 29는 답이 될 수 없는것이 29는 7로 완벽히 나눠지지 않고 마찬가지로 10으로도 완벽히 나눠지지 않는다.
         * */
        while(start <= end){
            val mid: Long = (start + end) / 2
            val count = times.fold(0L) {
                    acc, time ->
                acc + (mid / time)
            }

            if(n <= count){
                end = mid - 1
                answer = mid
            }
            else{
                start = mid + 1
            }
        }

        println(answer)
        return answer
    }
}

출처

 

프로그래머스

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

programmers.co.kr

 

728x90

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

Programmers DFS/BFS :: 레벨 2 :: 게임 맵 최단거리  (0) 2022.07.20
Programmers 완전탐색 :: 레벨2 :: 카펫  (0) 2022.07.19
Programmers 스택/큐::레벨2::프린터  (0) 2022.04.08
Programmers :: 해시 전화 번호 목록 레벨2  (0) 2022.03.26
Programmers :: 정렬 가장 큰 수 레벨2  (0) 2022.03.23
    'Algorithm/Programmers' 카테고리의 다른 글
    • Programmers DFS/BFS :: 레벨 2 :: 게임 맵 최단거리
    • Programmers 완전탐색 :: 레벨2 :: 카펫
    • Programmers 스택/큐::레벨2::프린터
    • Programmers :: 해시 전화 번호 목록 레벨2
    sggnology
    sggnology
    하늘은 파란색이니까 내 삶도 파란색이길 ㅎㅎ

    티스토리툴바