๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์‹คํŒจ์œจ

by syLim___ 2023. 3. 9.
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/42889

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr


์ฒ˜์Œ์— ์ œ์ถœํ–ˆ์—ˆ๋˜ ์ฝ”๋“œ (์ ์ˆ˜:70์ )

def solution(N, stages):
    answer = []
    
    failed=[0]*501 #๊ฐ ์Šคํ…Œ์ด์ง€์— ๋ฉˆ์ถฐ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ˆ˜ ์ €์žฅํ•  ๋ฐฐ์—ด
    cleared=[0]*501 #๊ฐ ์Šคํ…Œ์ด์ง€์— ๋„๋‹ฌํ•œ ์‚ฌ์šฉ์ž ์ˆ˜ ์ €์žฅํ•  ๋ฐฐ์—ด
    
    for i in stages:
        failed[i] += 1
        for j in range(1,i+1):
            cleared[j] += 1
            
    arr=[]
    for i in range(1,501):
    	#๋ถ„๋ชจ๊ฐ€ 0์ด ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‹คํŒจ์œจ๊ณผ ์Šคํ…Œ์ด์ง€๋ฒˆํ˜ธ ์ €์žฅ
        if cleared[i] != 0:
            arr.append((failed[i]/cleared[i],i))
    
    #์ฒซ๋ฒˆ์งธ์กฐ๊ฑด: ์‹คํŒจ์œจ ๋‚ด๋ฆผ์ฐจ์ˆœ, ๋‘๋ฒˆ์งธ์กฐ๊ฑด: ์Šคํ…Œ์ด์ง€๋ฒˆํ˜ธ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
    arr.sort(key=lambda x:(-x[0],x[1]))
    
    #์ •๋ ฌํ•œ ์Šคํ…Œ์ด์ง€ ๋ฒˆํ˜ธ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ ๋ฆฌํ„ด
    for rate,num in arr:
        if num<=N:
            answer.append(num)
    return answer

 

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ค‘ ๋ช‡๋ช‡ ๊ฐœ์—์„œ๋งŒ ์˜ค๋‹ต์ด ๋–ด๋‹ค.

 

N์— ๋„๋‹ฌํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ํ•œ ๋ช…๋„ ์—†์„ ๊ฒฝ์šฐ ์‹คํŒจ์œจ 0์œผ๋กœ arr์— append๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ,

์ด ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„์„œ ์˜ค๋‹ต์ด ๋–ด๋˜ ๊ฑฐ์˜€๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ์ธํ’‹ N=4, stages=[1,1,2,3,3,3]์ผ ๋•Œ

์•„์›ƒํ’‹์œผ๋กœ๋Š” [3,2,1,4] ๊ฐ€ ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ

 

์œ„ ์ฝ”๋“œ์ƒ์œผ๋กœ๋Š” [3,2,1] ๋งŒ ๋ฆฌํ„ด๋˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ์žˆ์—ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ์ ์„ ๊ณ ๋ คํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋‹ˆ๊นŒ ์ •๋‹ต ํŒ์ •์„ ๋ฐ›์•˜๋‹ค.


์ •๋‹ต ์ฝ”๋“œ

def solution(N, stages):
    answer = []
    
    failed=[0]*502 #๊ฐ ์Šคํ…Œ์ด์ง€์— ๋ฉˆ์ถฐ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ˆ˜
    cleared=[0]*502 #๊ฐ ์Šคํ…Œ์ด์ง€์— ๋„๋‹ฌํ•œ ์‚ฌ์šฉ์ž ์ˆ˜
    
    for i in stages:
        failed[i] += 1
        for j in range(1,i+1):
            cleared[j] += 1
            
    arr=[]
    for i in range(1,N+1):
    	#๋ถ„๋ชจ๊ฐ€ 0์ด ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ์‹คํŒจ์œจ๊ณผ ์Šคํ…Œ์ด์ง€ ๋ฒˆํ˜ธ ์ €์žฅ
        if cleared[i] != 0:
            arr.append((failed[i]/cleared[i],i))
        #ํ•ด๋‹น ์Šคํ…Œ์ด์ง€๊นŒ์ง€ ๋„๋‹ฌํ•œ ์‚ฌ์šฉ์ž ์—†๋Š” ๊ฒฝ์šฐ,
         ์‹คํŒจ์œจ์€ 0์œผ๋กœ ์ €์žฅ
        else:
            arr.append((0,i))
    
    #์ฒซ๋ฒˆ์งธ์กฐ๊ฑด:์‹คํŒจ์œจ ๋‚ด๋ฆผ์ฐจ์ˆœ, ๋‘๋ฒˆ์งธ์กฐ๊ฑด:์Šคํ…Œ์ด์ง€๋ฒˆํ˜ธ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
    arr.sort(key=lambda x:(-x[0],x[1]))
    
    #์ •๋ ฌํ•œ ์Šคํ…Œ์ด์ง€ ๋ฒˆํ˜ธ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ ๋ฆฌํ„ด
    for rate,num in arr:
        if num<=N:
            answer.append(num)
    return answer

 

+์ถ”๊ฐ€

   1. ์Šคํ…Œ์ด์ง€ ๊ฐœ์ˆ˜ N์€ 1์ด์ƒ 500์ดํ•˜์˜ ์ž์—ฐ์ˆ˜๋žฌ๊ณ 
   2. stages์—๋Š” 1์ด์ƒ N+1 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ๋‹ด๊ฒจ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

์ฒ˜์Œ์—๋Š” 1๋ฒˆ ์กฐ๊ฑด๋งŒ์„ ๋ณด๊ณ  failed,cleared ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๋ฅผ 501๋กœ ์„ค์ •ํ–ˆ์—ˆ๋Š”๋ฐ,

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ค‘ 2๊ฐœ์—์„œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋–ด๋‹ค.

 

arr1, arr2์— ๊ฐ’์„ ์ €์žฅํ•ด์ฃผ๋Š” ๊ณผ์ •์—์„œ (line 7~10)

stages ๊ฐ’ ์ค‘์— ์ •ํ™•ํžˆ N+1์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ธ๋ฑ์Šค ์—๋Ÿฌ๊ฐ€ ๋– ์„œ ๊ทธ๋Ÿฐ ๊ฒƒ ๊ฐ™๋‹ค.

 

๊ทธ๋ž˜์„œ ๋‘ ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๋ฅผ 502๋กœ ์„ค์ •ํ•ด์ฃผ๋‹ˆ ๋ชจ๋“  ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์—์„œ ์‹คํŒจ ์—†์ด ์ž˜ ์‹คํ–‰๋˜์—ˆ๋‹ค.

 

728x90