๋ฐ๋ธŒ์ฝ”์Šค_๋ฐ์ดํ„ฐ์—”์ง€๋‹ˆ์–ด๋ง

[Week2 ์ž๋ฃŒ๊ตฌ์กฐ/์•Œ๊ณ ๋ฆฌ์ฆ˜] TIL 5์ผ์ฐจ - ์ž๋ฃŒ๊ตฌ์กฐ/์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ์šฉํ•˜๊ธฐ

๐Ÿช„ํ•˜๋ฃจ๐Ÿช„ 2023. 10. 20. 17:35
728x90

๊ทธ๋™์•ˆ ๋ฐฐ์› ๋˜ ์ž๋ฃŒ๊ตฌ์กฐ๋“ค์„ ์ด์ œ ๋ฌธ์ œ์— ์ ์šฉํ•ด ๋ณด์ž.

 

1) ํ•ด์‹œ

[programmers-Lv1] ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜

 

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

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

programmers.co.kr

๋ฌธ์ œ ๊ฐœ์š”

๋งˆ๋ผํ†ค ๊ฒฝ๊ธฐ์— ์ฐธ์—ฌํ•œ ์‚ฌ๋žŒ๊ณผ ์™„์ฃผํ•œ ์„ ์ˆ˜์˜ ๋ช…๋‹จ์ด ์ฃผ์–ด์งˆ ๋•Œ, ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜์˜ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•ด๋ผ.(์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜๋Š” 1๋ช…์ด๋‹ค)

 

ํ’€์ด

  • ์„ ์ˆ˜์˜ ์ด๋ฆ„์„ key๋กœ ์„ ์ˆ˜์˜ ์ˆซ์ž๋ฅผ value๋กœ ํ•˜๋Š” dict๋ฅผ ๋งŒ๋“ค์–ด ์ €์žฅ(๋™๋ช…์ด์ธ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ)
  • ์™„์ฃผ ๋ช…๋‹จ์˜ ์ด๋ฆ„์ด ๋‚˜์˜ค๋ฉด ํ•ด๋‹น dict[key]๊ฐ’์„ 1 ๊ฐ์†Œ
  • ๊ฐ’์ด 0์ด ์•„๋‹Œ key ๊ฐ’์„ ๋ฐ˜ํ™˜(=์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜์ด๋‹ค)
def solution(participant, completion):
    print(participant+completion)
    d={}
    for people in participant:
        d[people]=d.get(people, 0)+1
    for peopel in completion:
        d[peopel]-=1
    for key in d.keys():
        if d[key]!=0:
            return key

 

2) ํƒ์š•๋ฒ•

์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฐ ๋‹จ๊ณ„์—์„œ ๊ทธ ์ˆœ๊ฐ„์— ์ตœ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋‹ต์„ ์„ ํƒํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ˜„์žฌ์˜ ์„ ํƒ์ด ๋งˆ์ง€๋ง‰ ํ•ด๋‹ต์˜ ์ตœ์ ์„ฑ์„ ํ•ด์น˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

[programmers-Lv1] ์ฒด์œก๋ณต

 

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

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

programmers.co.kr

๋ฌธ์ œ ๊ฐœ์š”

์ฒด์œก๋ณต์ด ์žˆ์–ด์•ผ ์ฒด์œก ์ˆ˜์—…์„ ๋“ค์„ ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๋ถ„์˜ ์ฒด์œก๋ณต์ด ์žˆ๋Š” ํ•™์ƒ์ด ์ฒด์œก๋ณต์ด ์—†๋Š” ํ•™์ƒ์—๊ฒŒ ๋นŒ๋ ค์ค„ ๋•Œ, ์ฒด์œก์ˆ˜์—…์„ ๋“ค์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํ•™์ƒ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ

(๋‹จ, ์ž์‹ ์ด ์—ฌ๋ถ„์˜ ์ฒด์œก๋ณต์ด ์žˆ์ง€๋งŒ, ์ฒด์œก๋ณต์„ ์žƒ์–ด๋ฒ„๋ ธ์„ ๊ฒฝ์šฐ์—๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๊ณ  ๋นŒ๋ ค์ฃผ์ง€ ์•Š๋Š”๋‹ค.) 

 

ํ’€์ด 1

ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์— ๋ชจ๋“  ํ•™์ƒ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.(ํŽธํ•˜๊ฒŒ ์ธ๋ฑ์‹ฑ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌ์ŠคํŠธ ๊ธธ์ด๋ฅผ ์•ž๋’ค ํ•œ ์นธ์”ฉ ์ถ”๊ฐ€)

  • ์ดˆ๊ธฐ ๋ฐฐ์—ด์˜ ์›์†Œ๊ฐ’์€ 1
  • ์—ฌ๋ถ„์˜ ์ฒด์œก๋ณต์ด ์žˆ๋Š” ๊ฒฝ์šฐ +1
  • ์ฒด์œก๋ณต์„ ์žƒ์–ด๋ฒ„๋ฆฐ ํ•™์ƒ์˜ ๊ฒฝ์šฐ -1
  • ํ•ด๋‹น ๋ฐฐ์—ด์— ๋Œ€ํ•ด ๊ฐ’์ด 0์ด๋ฉด(์ฒด์œก๋ณต์ด ์—†์œผ๋ฉด) ์•ž๋’ค ํ•™์ƒ์˜ ๊ฐ’์„ ํ™•์ธํ•ด ๋นŒ๋ฆฐ๋‹ค.
def solution(n, lost, reserve):
    student=[1 for i in range(n+2)]
    for r in reserve:
        student[r]+=1
    for l in lost:
        student[l]-=1
    
    for idx in range(1, len(student)-1):
        if student[idx]==0: #์ขŒ์šฐ ํ™•์ธ
            if student[idx-1]>=2:
                student[idx]=1
                student[idx-1]-=1
            elif student[idx+1]>=2:
                student[idx]=1
                student[idx+1]-=1
            else:
                continue
    answer=0
    for s in student:
        if s>=1:
            answer+=1
    return answer-2

 

ํ’€์ด 2

์•ž์„  ํ’€์ด 1์€ ํ•™์ƒ์˜ ์ˆ˜๊ฐ€ ์ปค์ง€๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋งŽ์ด ๊ฑธ๋ฆฐ๋‹ค.

ํ™•์ธํ•ด์•ผ ํ•  ํ•™์ƒ๋งŒ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•(lost๋‚˜ reserve)

  • ์ง‘ํ•ฉ(set) ์ด์šฉ : ์ž๊ธฐ ์ž์‹ ์ด ์—ฌ๋ถ„์˜ ์ฒด์œก๋ณต์ด ์žˆ๊ณ , ์ฒด์œก๋ณต์„ ์žƒ์–ด๋ฒ„๋ ธ์œผ๋ฉด ๋‘ ๋ฐฐ์—ด์—์„œ ์‚ญ์ œ
  • lost ํ•™์ƒ์˜ ์ˆ˜ <reserve ํ•™์ƒ์˜ ์ˆ˜ : lost ๋ฐฐ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ํ™•์ธ
    • lost์˜ ํ•™์ƒ์„ ํฌ๊ธฐ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๋’ค, ํ•ด๋‹น ์›์†Œ์˜ ์•ž๋’ค ํ•™์ƒ์ด ์—ฌ๋ถ„์˜ ์ฒด์œก๋ณต์ด ์žˆ๋Š”์ง€ (reserve์— ์›์†Œ๊ฐ€ ์žˆ๋Š”์ง€) ํ™•์ธ
  • lost ํ•™์ƒ์˜ ์ˆ˜> reserve ํ•™์ƒ์˜ ์ˆ˜ : reseve ๋ฐฐ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ํ™•์ธ
    • reserve์˜ ํ•™์ƒ์„ ํฌ๊ธฐ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๋’ค, ํ•ด๋‹น ์›์†Œ์˜ ์•ž๋’ค ํ•™์ƒ์ด ์—ฌ๋ถ„์˜ ์ฒด์œก๋ณต์ด ์žˆ๋Š”์ง€ (reserve์— ์›์†Œ๊ฐ€ ์žˆ๋Š”์ง€) ํ™•์ธ
def solution(n, lost, reserve):
    lost, reserve=list(set(lost)-set(reserve)), list(set(reserve)-set(lost))
    answer=n-len(lost)
    lost.sort(reverse=True)
    reserve.sort(reverse=True)
    if len(lost)<len(reserve): #lost ๊ธฐ์ค€์œผ๋กœ ํ™•์ธ
        while len(lost)!=0 and len(reserve)!=0:
            minus=lost[-1]-1
            plus=lost[-1]+1
            lost.pop()
            if minus in reserve:
                reserve.remove(minus)
            elif plus in reserve:
                reserve.remove(plus)
            else:
                continue
            answer+=1
    else:#Reserve ๊ธฐ์ค€์œผ๋กœ ํ™•์ธ
        while len(reserve)!=0 and len(lost)!=0:
            minus=reserve[-1]-1
            plus=reserve[-1]+1
            reserve.pop()
            if minus in lost:
                lost.remove(minus)
            elif plus in lost:
                lost.remove(plus)
            else:
                continue
            answer+=1
                
            
    return answer

 

[programmers-Lv2] ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ

 

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

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

programmers.co.kr

๋ฌธ์ œ ๊ฐœ์š”

์–ด๋–ค ์ˆ˜์—์„œ k๊ฐœ์˜ ์ˆ˜๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ๋ผ.

 

ํ’€์ด

์•ž, ๋’ค ์›์†Œ๋ฅผ ๋น„๊ต

  • k๊ฐœ์˜ ์›์†Œ๋ฅผ ๊บผ๋‚ด๊ฑฐ๋‚˜, ๋๊นŒ์ง€ ๊ฒ€์‚ฌํ–ˆ์„ ๋•Œ ์•ž์˜ ์›์†Œ๊ฐ€ ๋’ค์— ์›์†Œ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผ ํ•จ
  • k ๊ฐœ์˜ ์›์†Œ๋ฅผ ๊บผ๋‚ด์ง€ ๋ชปํ•˜๊ณ  ๋ฐ˜๋ณต๋ฌธ์ด ์ข…๋ฃŒ๋˜๋ฉด, ์ œ๊ฑฐ๋œ ์ˆ˜์˜ ์•ž์˜ ์›์†Œ๊ฐ€ ๋’ค์— ์›์†Œ๋ณด๋‹ค ํฌ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ๋’ค์—์„œ ๋‚˜๋จธ์ง€ k์ž๋ฆฌ ์ œ๊ฑฐ
def solution(number, k):
    if len(number)-k==1:
        return max(number)
    answer=""
    last=[number[0]]
    idx=1
    while k>0 and idx<len(number):
        if last[-1]<number[idx]:
            while k>0 and len(last)>0 and last[-1]<number[idx]:
                last.pop()
                k-=1
        last.append(number[idx])
        idx+=1
    if idx<len(number):
        last+=(number[idx:])
    if k>0:
        last=last[:-(k)]
    return ''.join(last)

 

3) ์ •๋ ฌ

key ์˜ต์…˜์„ ์ด์šฉํ•˜๋ฉด ์›ํ•˜๋Š” ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ •๋ ฌ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

[programmers-Lv2] ๊ฐ€์žฅ ํฐ ์ˆ˜

 

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

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

programmers.co.kr

๋ฌธ์ œ ๊ฐœ์š”

n๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ํ•ด๋‹น ์ˆซ์ž๋ฅผ ๋ฐฐ์น˜ํ•ด์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ๋ผ(์ˆ˜๋Š” 1000 ์ดํ•˜์ด๋‹ค.)

 

ํ’€์ด 1

์ˆ˜์˜ [0], [1], [2], [3] ๋ฒˆ์งธ์˜ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค.

def solution(numbers):
    str_numbers=[str(num) for num in numbers]
    str_numbers.sort(key=lambda x : (x*1000)[:4], reverse=True)
    str_numbers=''.join(str_numbers)    
    return str_numbers if str_numbers[0]!="0" else "0"

 

4) ํž™

ํŒŒ์ด์ฌ์˜ ๋‚ด์žฅ ์ž๋ฃŒํ˜•์„ ์ด์šฉํ•ด์„œ ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์ž.

 

import heapq

์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์—ฐ์‚ฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๐Ÿฆ›heapq.heapify(list) → heap : $O(nlogn)$
list๋ฅผ heap์œผ๋กœ ๋ณ€ํ™˜
๐Ÿฆ›heapq.heappush(heap, item) → None : $O(logn)$
item์„ heap์— ์ถ”๊ฐ€
๐Ÿฆ›heapq.heappop(heap) → item :$O(logn)$
heap์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ๋ฅผ pop, ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ IndexError๊ฐ€ ํ˜ธ์ถœ

[programmers-Lv1] ๋” ๋งต๊ฒŒ

๋ฌธ์ œ ๊ฐœ์š”

๋ชจ๋“  ์›์†Œ๋ฅผ ํŠน์ •๊ฐ’ ์ด์ƒ์œผ๋กœ ๋งŒ๋“œ๋ ค๊ณ  ํ•œ๋‹ค.

ํŠน์ •๊ฐ’ ์ดํ•˜์ธ ์›์†Œ๋“ค์— ๋Œ€ํ•ด (์ตœ์†Ÿ๊ฐ’+๋‘ ๋ฒˆ์งธ ์ตœ์†Ÿ๊ฐ’*2) ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ด์„œ ํŠน์ •๊ฐ’ ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค๋ ค๊ณ  ํ•  ๋•Œ, ์ตœ์†Œ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

์ตœ์†Ÿ๊ฐ’๋“ค์„ ๊ณ„์† ์–ป์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํž™ ์ž๋ฃŒ๊ตฌ์กฐ(์ตœ์†Œํž™)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

ํ’€์ด

  • heap.pop์˜ ๊ฐ’์ด K๋ณด๋‹ค ํฌ๋ฉด ๋‚˜๋จธ์ง€ ๋ชจ๋“  ์›์†Œ๊ฐ€ K๋ณด๋‹ค ํฌ๋‹ค๋Š” ์˜๋ฏธ ์ด๋ฏ€๋กœ ์ง€๊ธˆ๊นŒ์ง€์˜ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
  • K๋ณด๋‹ค ์ž‘์œผ๋ฉด, $์ตœ์†Ÿ๊ฐ’1+2*์ตœ์†Ÿ๊ฐ’2$ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ ๋’ค ์‚ฝ์ž…
import heapq
def solution(scoville, K):
    heapq.heapify(scoville)
    answer=0
    while len(scoville)!=0:
        num1=heapq.heappop(scoville)
        if num1>=K:
            break
        else:
            if len(scoville)==0:
                return -1
            else:
                num2=heapq.heappop(scoville)
                heapq.heappush(scoville, num1+2*num2)
                answer+=1

    return answer

 

5) ๋™์ ๊ณ„ํš๋ฒ•(Dynamic programming)

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ง„ํ–‰์— ๋”ฐ๋ผ ํƒ์ƒ‰ํ•ด์•ผ ํ•  ๋ฒ”์œ„๋ฅผ ๋™์ ์œผ๋กœ ๊ฒฐ์ •ํ•จ์œผ๋กœ์จ ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ํ•œ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋งํ•œ๋‹ค.

ex) ํ”ผ๋ณด๋‚˜์น˜์ˆ˜์—ด, ๋ฐฐ๋‚ญ์— ๋ฌผ๊ฑด ๋‹ด๊ธฐ(knapsack)

 

[programmers-Lv3] N์œผ๋กœ ํ‘œํ˜„

 

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

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

programmers.co.kr

๋ฌธ์ œ ๊ฐœ์š”

์–ด๋–ค ์ˆ˜๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ์–ด๋–ค ์ˆ˜์™€ ์‚ฌ์น™์—ฐ์‚ฐ๋งŒ์„ ์ด์šฉํ•ด์„œ ํŠน์ •๊ฐ’์„ ๋งŒ๋“ค ๋•Œ, ์–ด๋–ค ์ˆ˜๋ฅผ ์ตœ์†Œ๋กœ ์‚ฌ์šฉ์„ ๊ตฌํ•˜์—ฌ๋ผ.

ex) 5(์–ด๋–ค ์ˆ˜), ํŠน์ •๊ฐ’(12) ์ด๋ฉด (55+5)/5 4๋ฒˆ์ด๋‹ค.

 

ํ’€์ด

๊ทธ์ „์— ์–ด๋–ค ์ˆ˜๋ฅผ 1, 2, 3,... k๋ฒˆ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋“ค์„ ์ด์šฉํ•ด  k+1๋ฒˆ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ง‘ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•œ๋‹ค.

ex) 5๋ฒˆ ์‚ฌ์šฉ = (1, 4), (2, 3) ์ด์šฉ

  • dict๋ฅผ ์ด์šฉํ•ด ์–ด๋–ค ์ˆ˜๋ฅผ k๋ฒˆ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ง‘ํ•ฉ์„ ์ €์žฅ
  • set์„ ์ด์šฉํ•ด ์ค‘๋ณต๋œ ์ˆ˜๋ฅผ ์ œ๊ฑฐ
def solution(N, number):
    first=[N]
    second=list(set([10*N+N, N+N, N-N, N*N, N//N]))
    num_dict={1:first, 2:second}
    
    if N==number:
        return 1

    answer=2
    while (number not in num_dict[answer]):
        if answer>8:
            return -1
        now=[]
        sum=N
        for i in range(1, answer+1):
            sum+=N*(10**i)
        now.append(sum)
        
        for idx in range(1, (answer+1)//2+1, 1):
            prev1=num_dict[idx]
            prev2=num_dict[(answer+1)-idx]
            for num1 in prev1:
                for num2 in prev2:
                    now.append(num1+num2)
                    now.append(num1-num2)
                    now.append(num2-num1)
                    now.append(num1*num2)
                    if num2!=0:
                        now.append(num1//num2)
                    if num1!=0:
                        now.append(num2//num1)
        answer+=1
        num_dict[answer]=list(set(now))
    return answer

 

6) DFS/BFS

DFS : ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ with Stack

ํ•œ์ •์ ์—์„œ ์ธ์ ‘ํ•œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ •์ ์„ ๋ฐฉ๋ฌธํ•˜๋˜, ๋์˜ ์ž์‹๋…ธ๋“œ๊นŒ์ง€ ํƒ์ƒ‰์„ ๋๋‚ธ ๋’ค ๋‹ค์Œ ์ •์ ์œผ๋กœ ์ง„ํ–‰

BFS : ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ with Queue

ํ•œ ์ •์ ์—์„œ ์ธ์ ‘ํ•œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ •์ ์„ ๋ฐฉ๋ฌธํ•˜๋˜, ๋ชจ๋“  ๊ฐ™์€ ๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ ํƒ์ƒ‰์„ ๋๋‚ธ ๋’ค ๋‹ค์Œ ๋ ˆ๋ฒจ๋กœ ํƒ์ƒ‰์„ ์ง„ํ–‰

 

[programmers-Lv3] ์—ฌํ–‰๊ฒฝ๋กœ

 

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

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

programmers.co.kr

๋ฌธ์ œ ๊ฐœ์š”

์ถœ๋ฐœ์ง€์™€ ๋น„ํ–‰๊ธฐ์˜ ํ•ญ๊ณต๊ถŒ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ํ•ญ๊ณต๊ถŒ์„ ์‚ฌ์šฉํ•œ ๋น„ํ–‰๊ธฐ์˜ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ

๋‹จ, ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๊ฐ€ ์•ž์„œ๋Š” ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜

 

ํ’€์ด

๊นŠ์ด ์šฐ์„  ๋ฐฉ์‹์„ ์ด์šฉํ•˜์—ฌ ์ตœ์ ํ•ด๋ฅผ ์ฐพ์œผ๋ฉด ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•œ๋‹ค.

  • ํ•ญ๊ณต๊ถŒ์„ ์ถœ๋ฐœ์ง€๋ฅผ key๋กœ ํ•˜๋Š” dictionary์— ์ €์žฅํ•œ ๋’ค, ์•ŒํŒŒ๋ฒณ ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌ(์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ $O(n)$์ธ list.pop()์„ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด
  • ์Šคํƒ์— ์ตœ์ƒ์œ„ ์žฅ์†Œ๋ฅผ ์ถœ๋ฐœ์ง€๋กœ ํ•˜๋Š” ํ•ญ๊ณต๊ถŒ์ด ์žˆ๋Š”์ง€ ํƒ์ƒ‰
    • ์žˆ์œผ๋ฉด ์Šคํƒ์— ๋„์ฐฉ์ง€๋ฅผ ์ถ”๊ฐ€
    • ์—†์œผ๋ฉด ํ•ด๋‹น ๋„์ฐฉ์ง€๋ฅผ ๊ฒฝ๋กœ์— ์ถ”๊ฐ€
from collections import defaultdict

def solution(tickets):
    routes = {}
    
    for t in tickets:
        routes[t[0]]=routes.get(t[0], [])+[t[1] ]   
    # ๋ชฉ์ ์ง€ ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ(์‹œ๊ฐ„๋ณต์žก๋„ O(1)์ธ pop ์—ฐ์‚ฐ ์‚ฌ์šฉ)
    for key in routes.keys():
        routes[key].sort(reverse = True)
    
    print(routes)
    stack = ["ICN"]
    path = []
    path_idx=[]
    
    while len(stack)>0:
        top=stack[-1]
        if top not in routes or len(routes[top])==0:
            path.append(stack.pop())
        else:
            stack.append(routes[top].pop())

        
    
    return path[::-1]
728x90