๐Ÿงฉ Problem Solving/[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] 42862 ์ฒด์œก๋ณต (python ํŒŒ์ด์ฌ)

์ œ๋ด‰์•„ 2023. 8. 24. 18:07
 

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

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

programmers.co.kr


n ๋ช…์˜ ํ•™์ƒ์ด ์žˆ๊ณ , ํ•™์ƒ๋“ค์€ ๊ณ ์œ  ๋ฒˆํ˜ธ๊ฐ€ ์žˆ๋‹ค. ๊ทผ๋ฐ ํ•™์ƒ๋“ค ์ค‘ ๋ช‡ ๋ช…์€ ์ฒด์œก๋ณต์„ ๋„๋‚œ๋‹นํ–ˆ๋‹ค. ์—ฌ๋ฒŒ์ด ์žˆ๋Š” ํ•™์ƒ์€ ์ฒด์œก๋ณต์„ ๋นŒ๋ ค ์ค„ ์ˆ˜ ์žˆ๋‹ค.

๊ทผ๋ฐ ์ฒด์œก๋ณต์„ ๋นŒ๋ ค์ฃผ๋Š” ๊ฒƒ์€ ๋ฐ”๋กœ ์•ž๋ฒˆํ˜ธ(i - 1) ๋˜๋Š” ๋’ท๋ฒˆํ˜ธ(i + 1)๋งŒ ๋นŒ๋ ค์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ฒด์œก๋ณต์ด ์žˆ์–ด์•ผ ์ฒด์œก ์ˆ˜์—…์„ ๋“ค์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ์ตœ๋Œ€ ๋ช‡ ๋ช…๊นŒ์ง€ ๋“ค์„ ์ˆ˜ ์žˆ์„๊นŒ?


์•„์ด๋””์–ด

ํ•™์ƒ ๋ฒˆํ˜ธ๋ฅผ ์ธ๋ฑ์Šค๋กœ ํ•˜๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ 1๋กœ ์ดˆ๊ธฐํ™”ํ•ด ์ค€๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ์—ฌ๋ฒŒ์ด ์žˆ๋Š” ํ•™์ƒ์€ +1, ๋„๋‚œ๋‹นํ•œ ํ•™์ƒ์€ -1 ํ•ด์ค€๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๋„๋‚œ๋‹นํ•œ ํ•™์ƒ ์–‘ ์˜†์— ์—ฌ๋ถ„์ด ์žˆ๋Š” ํ•™์ƒ์ด ์žˆ๋Š”์ง€ ์ฒดํฌํ•ด ์ค€๋‹ค.

์žˆ์œผ๋ฉด ๋‘ ์‚ฌ๋žŒ์˜ ์ฒด์œก๋ณต ๊ฐœ์ˆ˜๋ฅผ 1๋กœ ๋ฐ”๊ฟ” ์ค€๋‹ค.

 

๋งˆ์ง€๋ง‰์— ๋ฆฌ์ŠคํŠธ์˜ ์ฒด์œก๋ณต ๊ฐœ์ˆ˜๊ฐ€ 0๊ฐœ์ธ ํ•™์ƒ ์ˆ˜๋ฅผ count ํ•ด์„œ n๊ฐ’์—์„œ ๋นผ์ฃผ๊ณ  ์ •๋‹ต์„ return ํ•ด์ค€๋‹ค.


์ „์ฒด ์ฝ”๋“œ

def solution(n, lost, reserve):
    
    Arr = [1] * (n + 2)
    
    for r in reserve:
        Arr[r] += 1
    
    for l in lost:
        Arr[l] -= 1
    
    for i in range(1, n + 1):
        if Arr[i - 1] == 0 and Arr[i] == 2:
            Arr[i - 1], Arr[i] = 1, 1
        elif Arr[i] == 2 and Arr[i + 1] == 0:
            Arr[i], Arr[i + 1] = 1, 1
    
    answer = n - Arr.count(0)
    return answer

์ฝ”๋“œ ์„ค๋ช…

Arr = [1] * (n + 2)
    
for r in reserve:
    Arr[r] += 1

for l in lost:
    Arr[l] -= 1

๋จผ์ € ํ•™์ƒ์˜ ์ฒด์œก๋ณต ๊ฐœ์ˆ˜๋ฅผ ๋‹ด์„ ๋ฆฌ์ŠคํŠธ Arr๋ฅผ ์„ ์–ธํ•ด ์ค€๋‹ค. default๊ฐ’์€ 1๋กœ ์„ค์ •ํ•ด ์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์ค‘์— ์žˆ์„ ์—ฐ์‚ฐ์˜ ํŽธ์˜์„ฑ์„ ์œ„ํ•ด 1๋ฒˆ๊ณผ n๋ฒˆ ์–‘ ๋์— ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•ด ๋ฆฌ์ŠคํŠธ ํฌ๊ธฐ๋ฅผ n + 2๋กœ ์„ ์–ธํ•ด ์ค€๋‹ค. (0, 1, 2, 3... n - 1, n, n + 1) 

 

๊ทธ๋ฆฌ๊ณ  reserve์™€ lost์— ์žˆ๋Š” ํ•™์ƒ ๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•˜์—ฌ Arr์— ์žˆ๋Š” ์ฒด์œก๋ณต ๊ฐœ์ˆ˜๋ฅผ ์กฐ์ ˆํ•ด ์ค€๋‹ค.

 

    for i in range(1, n + 1):
        if Arr[i - 1] == 0 and Arr[i] == 2:
            Arr[i - 1], Arr[i] = 1, 1
        elif Arr[i] == 2 and Arr[i + 1] == 0:
            Arr[i], Arr[i + 1] = 1, 1
    
    answer = n - Arr.count(0)

for๋ฌธ์œผ๋กœ Arr๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ์—ฌ๋ณ„์˜ ์ฒด์œก๋ณต์„ ๋นŒ๋ ค์ฃผ๋Š” ์กฐ๊ฑด์„ ํ™•์ธํ•ด ์ค€๋‹ค. ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ๊ฐ’์„ 1๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

 

์ตœ์ข…์ ์œผ๋กœ Arr์— ์žˆ๋Š” ์›์†Œ์ค‘ ๊ฐ’์ด 0์ธ ๊ฒƒ๋“ค์„ count ํ•ด์„œ n๊ฐ’์—์„œ ๋นผ์ฃผ๋ฉด, ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ์ •๋‹ต์ด ๋œ๋‹ค.

 


๋‹ค๋ฅธ ๋ฐฉ๋ฒ• - set ์ด์šฉ

def solution(n, lost, reserve):
    
    s = set(lost) & set(reserve)
    l = set(lost) - s
    r = set(reserve) - s
    
    for k in sorted(r):
        if (k - 1) in l:
            l.remove(k - 1)
        elif (k + 1) in l:
            l.remove(k + 1)
    
    return n - len(l)

๋„๋‚œ์ด๋ž‘ ์—ฌ๋ฒŒ์€ ์ƒ์‡„๋œ๋‹ค. ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ง‘ํ•ฉ์„ ํ™œ์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ lost์™€ reserve์˜ ๊ต์ง‘ํ•ฉ s๋ฅผ ๊ตฌํ•ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  lost์™€ reserve ์ง‘ํ•ฉ์—์„œ s์˜ ์›์†Œ๋“ค์„ ์ œ์™ธ์‹œ์ผœ ์ค€๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  ์—ฌ๋ฒŒ์ด ์žˆ๋Š” ํ•™์ƒ๋“ค์˜ ์ง‘ํ•ฉ r์„ ์ˆœํšŒํ•˜๋ฉฐ ์•ž๋’ค(k - 1, k + 1)์— ๋„๋‚œ๋‹นํ•œ ํ•™์ƒ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด ์ค€๋‹ค.

์žˆ์œผ๋ฉด ๊ทธ ํ•™์ƒ์€ ์ง‘ํ•ฉ l์—์„œ ์ œ์™ธ์‹œ์ผœ์ค€๋‹ค. 

 

์•ž์˜ ํ’€์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ n์—์„œ ์ง‘ํ•ฉ l์˜ ์›์†Œ ๊ฐœ์ˆ˜๋ฅผ ๋นผ์ฃผ๋ฉด ๋œ๋‹ค.