๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
CodingTest

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ์ทจ์ค€ํ•˜๋ฉฐ ๊ณต๋ถ€ํ•œ Greedy ์œ ํ˜• ์ด์ •๋ฆฌ (Python)

by ๋„์บ๋ฆฌ๐Ÿฑ 2022. 6. 9.
๋ฐ˜์‘ํ˜•

๊ทธ๋ฆฌ๋””

ํ˜„์žฌ ์ƒํ™ฉ์—์„œ ๊ฐ€์žฅ ์ข‹์•„๋ณด์ด๋Š” ๊ฒƒ๋งŒ์„ ๊ณ ๋ฅด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

Gold 5~ 3 ์ •๋„์˜ ๋ฌธ์ œ๋ฅผ ํ’€ ์ •๋„๋ผ๋ฉด, ์™ ๋งŒํ•œ ๊ธฐ์—… ์ฝ”ํ…Œ ์ˆ˜์ค€์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

๐Ÿ‘‡ ๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ ํŠน์ง•

→ ๋˜‘๊ฐ™์€ ๊ฑธ ๋‘๋ฒˆ ํ–ˆ์„ ๋•Œ ๋‹ค์‹œ ์ž๊ธฐ๋กœ ๋Œ์•„์˜จ๋‹ค.  
๊ทธ๋ง์€ ์ฆ‰, ํ•œ ๋ฒˆ ํ•œ๊ฑฐ๋Š” ๋‹ค์‹œ ํ•˜์ง€ ์•Š๋Š”๋‹ค. 

GREEDY๋Š” ์‚ฌ์‹ค ์œ ํ˜•์ด ๋งŽ์ง€ ์•Š๊ณ , ๊ฐ์œผ๋กœ ๋งž์ถ”๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€ ์œ ํ˜•์ด๋‹ค.

 

์•„๋ž˜์˜ 12๋ฌธ์ œ(โญ๏ธ ์œผ๋กœ ๊ตฌ๋ถ„), 2๊ฐ€์ง€ ์•Œ์•„ ๋‘˜ ๊ฒƒ(โœ๏ธ ์œผ๋กœ ๊ตฌ๋ถ„) ์„ ์ฐธ๊ณ ํ•˜๋ฉด

์™ ๋งŒํ•œ ๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ์— ์ˆ™๋ จ๋  ๊ฒƒ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

 


โญ๏ธ ๋ฐฑ์ค€ 11399 ATM ๋ฌธ์ œ : ์‹ค๋ฒ„ 3

(๐Ÿ‘‡ ์•„๋ž˜ ๋”๋ณด๊ธฐ ํด๋ฆญ ์‹œ, ๋ฐ”๋กœ ํ’€์ด ๋‹ต ๋‚˜์˜ต๋‹ˆ๋‹ค. ์‰ฌ์šด ๋ฌธ์ œ๋ผ ๋ณ„๋„ ์„ค๋ช… ์—†์Šต๋‹ˆ๋‹ค.)

๋”๋ณด๊ธฐ
N = int(input())

a = list(map(int, input().split()))

sum_a = 0

a.sort()
# print(a)

# 0,1,2,3,4
for i in range(N+1):
    for j in range(i):
        sum_a += a[j]

print(sum_a)

 

 

โญ๏ธ ๋ฐฑ์ค€ 5585 ๊ฑฐ์Šค๋ฆ„๋ˆ ๋ฌธ์ œ : ๋ธŒ๋ก ์ฆˆ 2

(๐Ÿ‘‡ ์•„๋ž˜ ๋”๋ณด๊ธฐ ํด๋ฆญ ์‹œ, ๋ฐ”๋กœ ํ’€์ด ๋‹ต ๋‚˜์˜ต๋‹ˆ๋‹ค. ์‰ฌ์šด ๋ฌธ์ œ๋ผ ๋ณ„๋„ ์„ค๋ช… ์—†์Šต๋‹ˆ๋‹ค.)

๋”๋ณด๊ธฐ
a = int(input())

#  1000์—” ์ง€ํ๋ฅผ ํ•œ์žฅ ๋ƒˆ์„ ๋•Œ, ๋ฐ›์„ ์ž”๋ˆ์— ํฌํ•จ๋œ ์ž”๋ˆ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
# 500์—”, 100์—”, 50์—”, 10์—”, 5์—”, 1์—”์ด ์ถฉ๋ถ„ํžˆ ์žˆ๊ณ , ์–ธ์ œ๋‚˜ ๊ฑฐ์Šค๋ฆ„๋ˆ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ๊ฒŒ ์ž”๋ˆ์„ ์ค€๋‹ค. 

cnt = 0
chg = 1000 - a

chgList = [500,100,50,10,5,1]

for i in chgList:
    cnt += (chg//i)
    chg = chg - (i*(chg//i))

print(cnt)

 

 

โญ๏ธ ๋ฐฑ์ค€ 1439 ๋’ค์ง‘๊ธฐ ๋ฌธ์ œ : ์‹ค๋ฒ„5

(๐Ÿ‘‡ ์•„๋ž˜ ๋”๋ณด๊ธฐ ํด๋ฆญ ์‹œ, ๋ฐ”๋กœ ํ’€์ด ๋‹ต ๋‚˜์˜ต๋‹ˆ๋‹ค. ์‰ฌ์šด ๋ฌธ์ œ๋ผ ๋ณ„๋„ ์„ค๋ช… ์—†์Šต๋‹ˆ๋‹ค.)

๋”๋ณด๊ธฐ
a = input()

a_1 = '1'
a_0 = '0'

isSame = False

cnt_1 = 0
cnt_0 = 0

for i in range(len(a)):
    if a[i] == a_1:
        isSame = False
    elif(not isSame):
        cnt_1 +=1
        isSame = True
        
isSame = False        

for i in range(len(a)):
    if a[i] == a_0:
        isSame = False
    elif(not isSame):
        cnt_0 +=1
        isSame = True

if(cnt_1 < cnt_0):
    print(cnt_1)
else:
    print(cnt_0)

 

 

โญ๏ธ ๋ฐฑ์ค€ 2012 ๋“ฑ์ˆ˜ ๋งค๊ธฐ๊ธฐ: ์‹ค๋ฒ„ 3

(๐Ÿ‘‡ ์•„๋ž˜ ๋”๋ณด๊ธฐ ํด๋ฆญ ์‹œ, ๋ฐ”๋กœ ํ’€์ด ๋‹ต ๋‚˜์˜ต๋‹ˆ๋‹ค. ์‰ฌ์šด ๋ฌธ์ œ๋ผ ๋ณ„๋„ ์„ค๋ช… ์—†์Šต๋‹ˆ๋‹ค.)

๋”๋ณด๊ธฐ
# Python3 ์ œ์ถœ ์•ˆ๋˜๊ณ  pypy๋งŒ ok
N = int(input())
nList = []
for i in range(N):
    nList.append(int(input()))
    
# 1 5 3 1 2
nList.sort()
# 1 1 2 3 5

sum_N = 0
for i in range(1,N+1):
    sum_N +=(abs(nList[i-1]-i))
    
print(sum_N)

 

 

โญ๏ธ ๋ฐฑ์ค€ 1092 ๋ฐฐ : ๊ณจ๋“œ 5

(๐Ÿ‘‡ ์•„๋ž˜ ๋”๋ณด๊ธฐ ํด๋ฆญ ์‹œ, ๋ฐ”๋กœ ํ’€์ด ๋‹ต ๋‚˜์˜ต๋‹ˆ๋‹ค. ๋‚œ์ด๋„๊ฐ€ ์žˆ์–ด์„œ ์ƒ์„ธ ํ’€์ด ๋ฐ ์„ค๋ช…๋„ ์žˆ์Šต๋‹ˆ๋‹ค.)

๋”๋ณด๊ธฐ
  • ๋ฐ•์Šค๋ฅผ ๋ฌด๊ฒŒ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•œ ๋‹ค์Œ, ๋ฌด๊ฑฐ์šด ๊ฒƒ๋ถ€ํ„ฐ ์˜ฎ๊ธฐ๋„๋ก ํ•œ๋‹ค.
  • ์‹œ๊ฐ„๋ณต์žก๋„ O(NM)์— ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. (N: ํฌ๋ ˆ์ธ์ˆ˜, M:๋ฐ•์Šค ์ˆ˜)
N = int(input())
cre = sorted(list(map(int,input().split())), reverse=True)

M = int(input())
boxs = sorted(list(map(int,input().split())), reverse=True)

if cre[0] < boxs[0]:
    print(-1)
else:
    count=0
    while boxs:
        count+=1
        for i in cre:
            if not boxsb :
                break
            else:
                for j in range(len(boxs)):
                    if boxs[j] <= i:
                        boxs.pop(j)
                        break
    print(count)

 

 

โญ๏ธ ๋ฐฑ์ค€ 2212 ์„ผ์„œ : ๊ณจ๋“œ 5

(๐Ÿ‘‡ ์•„๋ž˜ ๋”๋ณด๊ธฐ ํด๋ฆญ ์‹œ, ๋ฐ”๋กœ ํ’€์ด ๋‹ต ๋‚˜์˜ต๋‹ˆ๋‹ค. ๋‚œ์ด๋„๊ฐ€ ์žˆ์–ด์„œ ์ƒ์„ธ ํ’€์ด ๋ฐ ์„ค๋ช…๋„ ์žˆ์Šต๋‹ˆ๋‹ค.)

๋”๋ณด๊ธฐ

์ •๋ ฌ๋œ ์„ผ์„œ๋ฅผ ์ตœ๋Œ€ K๊ฐœ์˜ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ  ๋ฌธ์ œ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€

1. ๊ฐ ์„ผ์„œ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ 

2. ๊ฐ ์„ผ์„œ ์‚ฌ์ด ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ

3. ๊ฐ€์žฅ ๊ฑฐ๋ฆฌ ๋จผ ์ˆœ์„œ๋Œ€๋กœ K-1๊ฐœ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ ์ œ๊ฑฐ

 

sensor  = int(input())
tower = int(input())

sensorList = list(map(int, input().split()))
sensorList.sort()

if(tower>=sensor):
    print(0)
else:
    distList = []
    for i in range(1,sensor):
        distList.append(sensorList[i]-sensorList[i-1])
    distList.sort()
    
    for j in range(tower-1):
        distList.pop()
    
    print(sum(distList))

 

 

โœ๏ธ import heapq

(๐Ÿ‘‡ ์•„๋ž˜ ๋”๋ณด๊ธฐ ํด๋ฆญ ์‹œ, ์ž์„ธํ•œ ๊ฐœ๋… ์„ค๋ช…์ด ๋‚˜์˜ต๋‹ˆ๋‹ค. ๊ผญ ์•Œ์•„๋‘๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.)

๋”๋ณด๊ธฐ

ํŠธ๋ฆฌ๋ฅผ ํ™œ์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ

ํž™์€ ์ตœ๋Œ€/์ตœ์†Œ๊ฐ’ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๊ตฌ์กฐ ์ตœ๋Œ€๊ฐ’๊ณผ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์œผ๋ฉดO(log n)์ค‘ ํ•˜๋‚˜๋กœ ์ดํ•ดํ•˜๋ฉด ๋จ

 

depth (ํŠธ๋ฆฌ์˜ ๋†’์ด) ๋ฅผ h๋ผ๊ณ  ํ‘œ๊ธฐํ•œ๋‹ค๋ฉด,
n๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” heap ์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๋˜๋Š” ์‚ญ์ œ์‹œ, ์ตœ์•…์˜ ๊ฒฝ์šฐ root ๋…ธ๋“œ์—์„œ leaf ๋…ธ๋“œ๊นŒ์ง€ ๋น„๊ตํ•ด์•ผ ํ•˜๋ฏ€๋กœ **h = log_2{n}**์— ๊ฐ€๊นŒ์šฐ๋ฏ€๋กœ, ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” **O(log{n})**

- ์ฐธ๊ณ : ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์—์„œ log{n} ์—์„œ์˜ log์˜ ๋ฐ‘์€ 10์ด ์•„๋‹ˆ๋ผ, 2์ž…๋‹ˆ๋‹ค.
- ํ•œ๋ฒˆ ์‹คํ–‰์‹œ๋งˆ๋‹ค, 50%์˜ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ๋Š” ๋ช…๋ น์„ ์ œ๊ฑฐํ•œ๋‹ค๋Š” ์˜๋ฏธ.
	50%์˜ ์‹คํ–‰์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ

โœ๏ธ heapq.heapify(ํž™๋ฆฌ์ŠคํŠธ) : ๋ฆฌ์ŠคํŠธ ์ž์ฒด๋ฅผ heap ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋งŒ๋“ฌ

import heapq

jj = [10,11,9,8,15,16,8,3,1,2]

heapq.heapify(jj)

print(jj)
lenj = len(jj)

for i in range(lenj):
    print(heapq.heappop(jj))

 

โœ๏ธ heapq.heappush(ํž™๋ฆฌ์ŠคํŠธ,data) :ํž™๋ฆฌ์ŠคํŠธ์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž… / heapq.heappop(ํž™๋ฆฌ์ŠคํŠธ) : ํž™๋ฆฌ์ŠคํŠธ root pop

import heapq

jj = []

heapq.heappush(jj,4)
heapq.heappush(jj,10)
heapq.heappush(jj,11)
heapq.heappush(jj,2)
heapq.heappush(jj,1)

print(jj)
print("------------")
print(heapq.heappop(jj))
print(heapq.heappop(jj))
print(heapq.heappop(jj))
print(heapq.heappop(jj))
print(heapq.heappop(jj))

ref.

[ํŒŒ์ด์ฌ] heapq ๋ชจ๋“ˆ ์‚ฌ์šฉ๋ฒ•

 

 

โญ๏ธ ๋ฐฑ์ค€ 1461 ๋„์„œ๊ด€: ๊ณจ๋“œ 5 (heapq)

(๐Ÿ‘‡ ์•„๋ž˜ ๋”๋ณด๊ธฐ ํด๋ฆญ ์‹œ, ๋ฐ”๋กœ ํ’€์ด ๋‹ต ๋‚˜์˜ต๋‹ˆ๋‹ค. ๋‚œ์ด๋„๊ฐ€ ์žˆ์–ด์„œ ์ƒ์„ธ ํ’€์ด ๋ฐ ์„ค๋ช…๋„ ์žˆ์Šต๋‹ˆ๋‹ค.)

๋”๋ณด๊ธฐ
  • ์Œ์ˆ˜๋ฒ”์œ„ ์ฑ…๊ณผ, ์–‘์ˆ˜ ๋ฒ”์œ„ ์ฑ…์„ ๋‚˜๋ˆ„์–ด ์ƒ๊ฐ
  • ๋‘๊ฐœ์˜ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐ๊ฐ€๋Šฅ.
  • ๋งˆ์ง€๋ง‰ ์ฑ…์€ ๋‹ค์‹œ 0์œผ๋กœ ๋Œ์•„์˜ฌ ํ•„์š” ์—†์œผ๋ฏ€๋กœ,๊ฐ€์žฅ ๋จผ ์ฑ…์ด ๋งˆ์ง€๋ง‰์ด ๋˜์–ด์•ผ ํ•จ.
  • ์™•๋ณต๊ฑฐ๋ฆฌ - (๊ฐ€์žฅ ๋จผ ์ฑ…์˜ ํŽธ๋„ ๊ฑฐ๋ฆฌ)

python ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ → ๊ธฐ๋ณธ์ ์œผ๋กœ minHeap ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ตœ๋Œ€ ํž™์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ชจ๋“  ๊ฐ’์— - ๋ฅผ ๋ถ™์ธ๋‹ค.

import heapq

N,M = map(int, input().split()) # N,M <=50

bookList = list(map(int, input().split())) 

minusList = []
plustList = []

# ๊ฐ€์žฅ ๊ฑฐ๋ฆฌ๊ฐ€ ๋จผ ์ฑ… ๊นŒ์ง€ ๊ฑฐ๋ฆฌ(์Œ์ˆ˜ ๊ฐ’๊ณผ ์–‘์ˆ˜ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋‹ˆ๊นŒ...oh..)
largest = max(max(bookList), -min(bookList))

# ์ตœ๋Œ€ ํž™์„ ์œ„ํ•ด ์›์†Œ๋ฅผ ์Œ์ˆ˜๋กœ ์ˆ˜์ •
for i in bookList:
    if (i>0):
        heapq.heappush(plustList,-i)
    else:
        heapq.heappush(minusList,i)
        
result = 0

while plustList:
    # ํ•œ๋ฒˆ์— m ๊ฐœ์”ฉ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, m ๊ฐœ์”ฉ ๋นผ๋‚ด๊ธฐ
    result += heapq.heappop(plustList)
    for _ in range(M-1):
        if plustList:
            heapq.heappop(plustList)
            
while minusList:
    # ํ•œ๋ฒˆ์— m ๊ฐœ์”ฉ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, m ๊ฐœ์”ฉ ๋นผ๋‚ด๊ธฐ
    result += heapq.heappop(minusList)
    for _ in range(M-1):
        if minusList:
            heapq.heappop(minusList)
        
print(-result*2-largest)

 

 

โญ๏ธ ๋ฐฑ์ค€ 1781 ์ปต๋ผ๋ฉด : ๊ณจ๋“œ 2 (heapq)

(๐Ÿ‘‡ ์•„๋ž˜ ๋”๋ณด๊ธฐ ํด๋ฆญ ์‹œ, ๋ฐ”๋กœ ํ’€์ด ๋‹ต ๋‚˜์˜ต๋‹ˆ๋‹ค. ๋‚œ์ด๋„๊ฐ€ ์žˆ์–ด์„œ ์ƒ์„ธ ํ’€์ด ๋ฐ ์„ค๋ช…๋„ ์žˆ์Šต๋‹ˆ๋‹ค.)

๋”๋ณด๊ธฐ
  • ๊ฐ ๋ฌธ์ œ '์ปต๋ผ๋ฉด ์ˆ˜'๋ฅผ ์šฐ์„ ์ˆœ์œ„ ํ์— ๋„ฃ๊ณ , ๋ฐ๋“œ๋ผ์ธ์„ ์ดˆ๊ณผํ•˜๋ฉด ์ตœ์†Œ ์›์†Œ๋ฅผ ์ œ๊ฑฐ
import heapq

N = int(input())
listN = []
q =[]

for _ in range(N):
    listN.append(list(map(int,input().split())))
    
listN.sort()

for i in listN:
    a = i[0]
    heapq.heappush(q,i[1])
    
    # ๋ฐ๋“œ๋ผ์ธ์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ ์ตœ์†Œ ์›์†Œ๋ฅผ ์ œ๊ฑฐ
    if a<len(q):
        heapq.heappop(q)
        
print(sum(q))

 

 

โญ๏ธ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Greedy - ์ฒด์œก๋ณต 

(๐Ÿ‘‡ ์•„๋ž˜ ๋”๋ณด๊ธฐ ํด๋ฆญ ์‹œ, ๋ฐ”๋กœ ํ’€์ด ๋‹ต ๋‚˜์˜ต๋‹ˆ๋‹ค. ์‰ฌ์šด ๋ฌธ์ œ๋ผ ๋ณ„๋„ ์„ค๋ช… ์—†์Šต๋‹ˆ๋‹ค.)

๋”๋ณด๊ธฐ
  • ์—ฌ๋Ÿฌ ํ’€์ด๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
# set ์„ ํ™œ์šฉํ•œ ํ’€์ด
def solution(n,lost,reserve):
		# set์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฐ, O(๋ฐฐ์—ด์˜ ๊ธธ์ด)
    s = set(lost) & set(reserve)
    l = set(lost) - s
    r = set(reserve) - s
		# sorted  ์—์„œ O(klogk)
    for x in sorted(r):
        if x-1 in l:
            l.remove(x-1)
        elif x+1 in l:
            l.remove(x+1)
    return n-len(1)

 

# O(n)
def solution(n,lost,reserve):
    u = [1]*(n+2)
    for i in reserve:
        u[i] +=1
    for i in lost:
        u[i]-=1
    for i in range(1,n+1):
        if u[i-1] == 0 and u[i]==2:
            u[i-1:i+1] =[1,1]
        elif u[i]==1 and u[i+1]==0:
            u[i:i+1] = [1.1]
    return len([x for x in u[1:-1] if x > 0])

 

def solution(n, lost, reserve):
    
    answer = 0
    
    for i in range(1,n+1):
        if i in lost:
            if i in reserve:
                answer+=1
                reserve.remove(i)
            elif i-1 in reserve and i-1 not in lost:
                answer+=1
                reserve.remove(i-1)
            elif (i+1 in reserve and i+1 not in lost):
                answer +=1
                reserve.remove(i+1)
            else:
                pass
        else:
            answer+=1
    
    return answer

 

 

โœ๏ธ set

(๐Ÿ‘‡ ์•„๋ž˜ ๋”๋ณด๊ธฐ ํด๋ฆญ ์‹œ, ์ž์„ธํ•œ ๊ฐœ๋… ์„ค๋ช…์ด ๋‚˜์˜ต๋‹ˆ๋‹ค. ๊ผญ ์•Œ์•„๋‘๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.)

๋”๋ณด๊ธฐ

set ์€ HashTable ๋กœ ๊ตฌํ˜„์ด ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— key ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ์‹œ๊ฐ„์ด ์ƒ์ˆ˜์‹œ๊ฐ„์— ์ ‘๊ทผ ๊ฐ€๋Šฅ.

 

๋”•์…”๋„ˆ๋ฆฌ์™€ ๋‹ค๋ฅธ ์ ์€ value๋Š” ์—†๊ณ ,

์–ด๋–ค ์›์†Œ๊ฐ€ ์ด ์ง‘ํ•ฉ ์•ˆ์— ์†ํ•ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€๋งŒ ์ƒ๊ด€ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

( ์ฐธ๊ณ : ๋”•์…”๋„ˆ๋ฆฌ๋Š”, key ์™€ value๊ฐ€ mapping ๋˜์žˆ์Œ)

 

temp_list =[1,2,3,4,5]
temp_st = set(temp_list)

์ด๋•Œ set() ๋ณ€ํ™˜ ํ•จ์ˆ˜๋Š”, O(List์˜ ํฌ๊ธฐ)์˜ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.(์„ ํ˜•์ ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋จ.)

 

 

โญ๏ธ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Greedy -ํฐ์ˆ˜ ๋งŒ๋“ค๊ธฐ

(๐Ÿ‘‡ ์•„๋ž˜ ๋”๋ณด๊ธฐ ํด๋ฆญ ์‹œ, ๋ฐ”๋กœ ํ’€์ด ๋‹ต ๋‚˜์˜ต๋‹ˆ๋‹ค. ๋‚œ์ด๋„๊ฐ€ ์žˆ์–ด์„œ ์ƒ์„ธ ํ’€์ด ๋ฐ ์„ค๋ช…๋„ ์žˆ์Šต๋‹ˆ๋‹ค.)

๋”๋ณด๊ธฐ

 ์•„๋ž˜ ์‚ฌ์ง„์„ ์ฐธ๊ณ  ํ•˜์—ฌ, ํฐ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€

์ž‘์€ ๊ฑธ ๋นผ๋Š”๋ฐ, ์•ž์—์„œ ๋ถ€ํ„ฐ ์ž‘์€๊ฑธ ๋บ€๋‹ค.

 ์ฆ‰, ํฐ ์ˆ˜๊ฐ€ ์•ž์ž๋ฆฌ์— ๊ทธ๋ฆฌ๊ณ  ์ž‘์€์ˆ˜๊ฐ€ ๋’ท์ž๋ฆฌ์— ๋†“์ด๋ฉด ๋œ๋‹ค.

ํ’€์ด๋ฅผ ์„ค๋ช…ํ•˜๋ฉด 

1. ์ฃผ์–ด์ง„ ์ˆซ์ž๋กœ ๋ถ€ํ„ฐ ์ˆซ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ๋ชจ์€๋‹ค.

2. ์ด๋ฏธ ๋ชจ์•„๋‘” ๊ฒƒ ์ค‘ ์ง€๊ธˆ ๋“ฑ์žฅํ•œ ๊ฒƒ๋ณด๋‹ค ์ž‘์€ ๊ฒƒ๋“ค์€ ๋‹ค ๋นผ๋‚ธ๋‹ค.

3. ์•„์ง ๋บ„ ๊ฐœ์ˆ˜๋ฅผ ์ฑ„์šฐ์ง€ ๋ชปํ–ˆ์œผ๋ฉด ๋งจ ๋์—์„œ ๋นผ์•ผ ํ•œ๋‹ค.

 

 

def solution(number_str, k):
    collected = [] # ํ•˜๋‚˜์”ฉ ์ˆซ์ž ๋ชจ์•„์„œ ํฐ ์ˆ˜๋งŒ๋“œ๋ ค๊ณ  
    # ๋ฌธ์ž์—ด๋กœ๋„ ๋ชจ์„ ์ˆ˜๋Š” ์žˆ๊ฒ ์ง€๋งŒ, ๋ฌธ์ž์—ด์€ python์—์„œ immutableํ•œ ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค.. ๊ทธ๋ž˜์„œ List์— ๋ชจ์œผ๋Š”๊ฒŒ ์ข‹๋‹ค~
    for i,num in enumerate(number_str):
           # enumerate๋ฅผ ์‚ฌ์šฉํ•ด์„œ i ์— ์ธ๋ฑ์Šค๋ฅผ, num ์— ํ•ด๋‹น ๊ฐ’์„ ๋‹ด๊ฒŒ ํ–ˆ๋‹ค.
           # ๋‘๋ฒˆ์งธ ์กฐ๊ฑด์ด ์ฒซ๋ฒˆ์งธ๋ณด๋‹ค ์•ž์— ์žˆ์œผ๋ฉด ์•ˆ๋˜๋Š” ๋ถ€๋ถ„์„ ๊ณ ๋ ค. 
        while(len(collected)>0 and collected[-1]<num and k>0):
            collected.pop()
            k-=1
            if k ==0:
                collected += list(number_str[i:])
                break
        collected.append(num)
        
    collected = collected[:-k] if k>0 else collected
    answer = ''.join(collected)          
               
    return answer

 

 

โญ๏ธ ๋ฐฑ์ค€ 16676 ๊ทผ์šฐ์˜ ๋‹ค์ด์–ด๋ฆฌ ๊พธ๋ฏธ๊ธฐ

(๐Ÿ‘‡ ์•„๋ž˜ ๋”๋ณด๊ธฐ ํด๋ฆญ ์‹œ, ๋ฐ”๋กœ ํ’€์ด ๋‹ต ๋‚˜์˜ต๋‹ˆ๋‹ค. ์‰ฌ์šด ๋ฌธ์ œ๋ผ ๋ณ„๋„ ์„ค๋ช… ์—†์Šต๋‹ˆ๋‹ค.)

๋”๋ณด๊ธฐ
n  = input()
s = ('1'*len(n))

int_n = int(n)
int_s = int(s)

if(len(n) ==1):
    print(1)
elif(int_n >= int_s):
    print(len(n))
else:
    print(len(n)-1)

 

 

โญ๏ธ ๋ฐฑ์ค€ 2437 ์ €์šธ

(๐Ÿ‘‡ ์•„์ด๋””์–ด ์„ค๋ช…๋งŒ ๋‚˜์˜ต๋‹ˆ๋‹ค. ํ’€์ด๋Š” ๋”ฐ๋กœ ์—†์ง€๋งŒ, ์•„์ด๋””์–ด๊ฐ€ ์ค‘์š”ํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.)

๋”๋ณด๊ธฐ

๐Ÿค”Idea ๊ฐ€ ๋„ˆ๋ฌด๋„ˆ๋ฌด ์ค‘์š”ํ•˜๋‹ค.

์ถ”์˜ ๋ฌด๊ฒŒ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌ ํ•œ ํ›„, ํ•˜๋‚˜์”ฉ ๋”ํ•ด๊ฐ€๋Š”๋ฐ, ๊ทธ ํ•˜๋‚˜์”ฉ ๋”ํ•˜๋Š” ์ˆ˜๋ฅผ ๋‹ค์Œ ์ถ”์˜ ๋ฌด๊ฒŒ์™€ ๋น„๊ต๋ฅผ ํ•œ๋‹ค.

์ด๋•Œ, ๋‹ค์Œ ์ถ”๊ฐ€ ์—ฌํƒœ ๋”ํ–ˆ๋˜ ์ถ”๋“ค์˜ ํ•ฉ๋ณด๋‹ค ํฌ๋ฉด ํ•ด๋‹น ๊ฐ’์€ ์ฃผ์–ด์ง„ N๊ฐœ์˜ ์ถ”๋“ค๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค...

 

 

 

 

ref. ์ฐธ๊ณ  ํ•œ๋ฒˆ ํ•  ๊ฒƒ

+[Python] ์ˆœ์—ด, ์กฐํ•ฉ, ์ค‘๋ณต์ˆœ์—ด, ์ค‘๋ณต์กฐํ•ฉ(itertools๋ฅผ ํ™œ์šฉํ•œ ๊ตฌํ˜„)

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€