๐Ÿ“•Week1 day3(์ฝ”ํ…Œ ์—ฐ์Šต)

๋ฐ•์ค€ํฌยท2023๋…„ 8์›” 24์ผ

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

๋ชฉ๋ก ๋ณด๊ธฐ
6/28
post-thumbnail

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต๋ฌธ์ œ


ํ•ด์‹œ(Hash)๋ฌธ์ œ-์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜

ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ํ‚ค(key)์™€ ๊ฐ’(value)์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ž๋ฃŒ ๊ตฌ์กฐ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต์— ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
https://school.programmers.co.kr/learn/courses/30/lessons/42576

์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜

def solution(participant, completion):
    d ={}
    for x in participant:#์ฐธ๊ฐ€์ž๋ฅผ ๋”•์…”๋„ˆ๋ฆฌํ˜•ํƒœ๋กœ ์ €์žฅ
        d[x] = d.get(x,0) + 1 #x๊ฐ€ ์žˆ์œผ๋ฉด ์›๋ž˜ value ์—†์œผ๋ฉด 0์„ ๋ฐ˜ํ™˜
    for x in completion:#์™„์ฃผ์ž๋ฅผ ์ฐธ๊ฐ€์ž์—์„œ ๋บŒ
        d[x] -= 1
    dnf = [k for k, v in d.items() if v > 0] #value๊ฐ€ 0 ๋ณด๋‹ค ํฐ ํ‚ค๊ฐ’(์™„์ฃผ ๋ชปํ•œ ์‚ฌ๋žŒ)๋ฐ˜ํ™˜
    answer = dnf[0]
    return answer

๊ทธ๋ฆฌ๋””(Greedy)๋ฌธ์ œ - ์ฒด์œก๋ณต


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

https://programmers.co.kr/learn/courses/30/lessons/42862#
์ฒด์œก๋ณต ๋ฌธ์ œ๋Š” ์œ„ ๋งํฌ ์ฐธ๊ณ ํ•˜์„ธ์š”!

์ฒด์œก๋ณต

def solution(n, lost, reserve):
    all = [1]*(n+2)#์•ž๋’ค ๋ฒˆํ˜ธ๋ฅผ ํŒŒ์•…ํ•  ๋•Œ ๋งจ ์•ž,๋’ท์‚ฌ๋žŒ๋•Œ๋ฌธ์— ํ•˜๋‚˜์”ฉ ๋” ์ถ”๊ฐ€ํ•œ๋‹ค.
    for i in reserve:#์—ฌ๋ฒŒ์˜ท์ด ์žˆ๋Š”์‚ฌ๋žŒ +1
        all[i]+=1
    for j in lost:#์˜ท์„ ์žƒ์–ด๋ฒ„๋ฆฐ ์‚ฌ๋žŒ -1
        all[j]-=1
    for i in range(1,n+1):#์•ž์‚ฌ๋žŒ์„ ๋จผ์ € ๋‚˜๋ˆ ์ฃผ๋Š” ๋ฐฉ์‹
        if all[i-1]==0 and all[i] == 2:#์ž๊ธฐ ์•ž์‚ฌ๋žŒ ์˜ท์ด ์—†๊ณ  ์ž๊ธฐ๊ฐ€ ์—ฌ๋ฒŒ์˜ท์ด ์žˆ์œผ๋ฉด ๋‚˜๋ˆ ์คŒ
            all[i-1:i+1]=[1,1]
        elif all[i+1]==0 and all[i] == 2:#๋’ท์‚ฌ๋žŒ์ด ์—†์œผ๋ฉด ๋‚˜๋ˆ ์คŒ
            all[i:i+2]=[1,1]
        else:
            pass
    answer = n-all.count(0)
    return answer#len([x for x in all[1:-1] if x>0])

์ •๋ ฌ(Sort) - ๊ฐ€์žฅ ํฐ ์ˆ˜


๋ฌธ์ œ ์„ค๋ช…
0 ๋˜๋Š” ์–‘์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ •์ˆ˜๋ฅผ ์ด์–ด ๋ถ™์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์•Œ์•„๋‚ด ์ฃผ์„ธ์š”.
์˜ˆ๋ฅผ ๋“ค์–ด, ์ฃผ์–ด์ง„ ์ •์ˆ˜๊ฐ€ [6, 10, 2]๋ผ๋ฉด [6102, 6210, 1062, 1026, 2610, 2106]๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ์ด์ค‘ ๊ฐ€์žฅ ํฐ ์ˆ˜๋Š” 6210์ž…๋‹ˆ๋‹ค.

https://school.programmers.co.kr/learn/courses/30/lessons/42746
์ž์„ธํ•œ ๋‚ด์šฉ์€ ์œ„ ๋งํฌ ์ฐธ๊ณ !

def solution(numbers):
    numbers = list(map(str,numbers))#๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝ
    numbers.sort(key=lambda x :(x*4)[:4],reverse = True) #๊ฐ ์ˆซ์ž๋Š” 1000์ดํ•˜์ด๋ฏ€๋กœ :4๊นŒ์ง€
    if numbers[0] == '0':#0์ดํ•˜์˜ ์›์†Œ๋„ ๋“ค์–ด๊ฐ€๋ฏ€๋กœ 0๋งŒ ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ์ผ ๋•Œ ์ฒ˜๋ฆฌ
        answer ='0'
    else:
        answer = ''.join(numbers)
    return answer

๊ทธ๋ฆฌ๋””(Greedy) - ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ


๋ฌธ์ œ ์„ค๋ช…
์–ด๋–ค ์ˆซ์ž์—์„œ k๊ฐœ์˜ ์ˆ˜๋ฅผ ์ œ๊ฑฐํ–ˆ์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋ฅผ ๊ตฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆซ์ž 1924์—์„œ ์ˆ˜ ๋‘ ๊ฐœ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด [19, 12, 14, 92, 94, 24] ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋Š” 94 ์ž…๋‹ˆ๋‹ค.

https://school.programmers.co.kr/learn/courses/30/lessons/42883
์ž์„ธํ•œ ๋‚ด์šฉ์€ ์œ„ ๋งํฌ ์ฐธ๊ณ 

def solution(number, k):
    collected =[]
    for i, num in enumerate(number):
        while len(collected)>0 and collected[-1]< num and k>0: #collected์— ๋งจ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด๊ฐ„ ๋ฌธ์ž์™€๋งŒ ๋น„๊ตํ•˜๋ฉด ๋œ๋‹ค
            collected.pop()
            k-=1
        if k == 0:#k๊ฐ€ 0์ผ๋•Œ ๋‚˜๋จธ์ง€ ๋‹ค ์ด์–ด ๋ถ™์ธ๋‹ค.
            collected += list(number[i:])
            break
        collected.append(num)
    
    collected = collected[:-k] if k>0 else collected#๋นผ๋‚ผ ์ˆซ์ž๊ฐ€ ๋‚จ์•˜์„ ๊ฒฝ์šฐ
    answer = ''.join(collected)#๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋œ ์ˆซ์ž๋ฅผ ์ด์–ด๋ถ™์ž„
    return answer

profile
๊ฒŒ์„๋ €๋˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณต๋ถ€

0๊ฐœ์˜ ๋Œ“๊ธ€