๋ฐ์—”์œผ๋กœ ์„ฑ์žฅ์ค‘ ๐ŸŒฑ

์•Œ๊ณ ๋ฆฌ์ฆ˜/[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]

PROG LV1 : ๋‹ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ (python)

์จ๋ฐ 2023. 5. 11. 13:54

๋ฌธ์ œ

 

 

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

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

programmers.co.kr

 

๊ฐ„๋‹จํ•œ ๊ตฌํ˜„ ๋ฌธ์ œ์ธ๋ฐ, ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ƒ๊ฐํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

 

 

ํ’€์ด ๋ฐฉ๋ฒ•

 

์ ‘๊ทผ ๋ฐฉ๋ฒ•์ด ์™„์ „ ํ‹€๋ฆฐ ๊ฑด ์•„๋‹ˆ์—ˆ๋Š”๋ฐ, ๋‚ด๊ฐ€ ์ฒ˜์Œ์— ํ’€์—ˆ๋˜ ๋ฐฉ์‹์€ ๊ณ„์† ํ˜ธ๋ช…ํ•œ ์ด๋ฆ„์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

 

 

๊ทธ๋ž˜์„œ ๋งํฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ(ํ‚ค๊ฐ’์œผ๋กœ) ์„ ์ˆ˜ ์ด๋ฆ„์„ ์ €์žฅํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ์™€ ์„ ์ˆ˜ ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ(ํ‚ค๊ฐ’์œผ๋กœ) ๋“ฑ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ ๋‘ ๊ฐœ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 

 

์ฝ”๋“œ

 

######## ์‹œ๊ฐ„ ์ดˆ๊ณผ ์ฝ”๋“œ ########

def solution(players, callings):
    answer = []
    
    for x in callings:
        for idy, y in enumerate(players):
            if idy!= 0 and x == y:
                players[idy-1], players[idy] = players[idy], players[idy-1]
                break
                
    answer = players
    return answer

 

######## ์ •๋‹ต ์ฝ”๋“œ ########

def solution(players, callings):
    
    rank = {} # ์ˆœ์œ„: ์„ ์ˆ˜ ์ด๋ฆ„
    player = {} # ์„ ์ˆ˜ ์ด๋ฆ„: ์ˆœ์œ„
    
    for idx, x in enumerate(players):
        rank[idx] = x
        player[x] = idx
        
    for y in callings:
        this_rank = player[y] # ํ˜„์žฌ ๋ถˆ๋ฆฐ ์„ ์ˆ˜ ์ˆœ์œ„
        prev_rank = this_rank - 1 # ๋ถˆ๋ฆฐ ์„ ์ˆ˜ ์ˆœ์œ„ ์•ž ์ˆœ์œ„
        prev_person = rank[prev_rank] # ๋ถˆ๋ฆฐ ์„ ์ˆ˜ ์ˆœ์œ„ ์•ž ์‚ฌ๋žŒ ์ด๋ฆ„
        
        rank[prev_rank], rank[this_rank] = rank[this_rank], rank[prev_rank]
        player[prev_person], player[y] = player[y], player[prev_person]
    
    answer = list(rank.values())
    
    return answer