[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] μ‹€νŒ¨μœ¨ / Python
Problem Solving πŸ”₯/ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] μ‹€νŒ¨μœ¨ / Python

크게 μ–΄λ €μš΄ 뢀뢄은 μ—†λŠ” λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€.
μ •λ ¬ ν›„ 이진탐색을 톡해 μ‰½κ²Œ ν’€ 수 μžˆλŠ” λ¬Έμ œμž…λ‹ˆλ‹€.

programmers.co.kr/learn/courses/30/lessons/42889#

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - μ‹€νŒ¨μœ¨

μ‹€νŒ¨μœ¨ 슈퍼 κ²Œμž„ 개발자 μ˜€λ λ¦¬λŠ” 큰 고민에 λΉ μ‘Œλ‹€. κ·Έλ…€κ°€ λ§Œλ“  ν”„λžœμ¦ˆ μ˜€μ²œμ„±μ΄ λŒ€μ„±κ³΅μ„ κ±°λ’€μ§€λ§Œ, μš”μ¦˜ μ‹ κ·œ μ‚¬μš©μžμ˜ μˆ˜κ°€ κΈ‰κ°ν•œ 것이닀. 원인은 μ‹ κ·œ μ‚¬μš©μžμ™€ κΈ°μ‘΄ μ‚¬μš©μž 사이에 슀

programmers.co.kr

from bisect import bisect_left, bisect_right

def solution(N, stages):
    answer = []
    P = len(stages) # μ‚¬λžŒ 수
    stages.sort()
    for i in range(1, N+1):
        idx1 = bisect_left(stages, i)
        idx2 = bisect_left(stages, i+1)
        # P - idx1 ν•΄λ‹Ή μŠ€ν…Œμ΄μ§€μ΄μƒ 도달
        # P - idx2 ν•΄λ‹Ή μŠ€ν…Œμ΄μ§€λ₯Ό λ„˜μ–΄κ°
        if P - idx1 <= 0:
            answer.append((0, i))
        else:
            answer.append(( (idx2 - idx1) / (P - idx1), i))
    answer = sorted(answer, key = lambda x : (-x[0], x[1]))
    answer = [ ans[1] for ans in answer]
    return answer