๊ฐ๋ฐ์ผ์ง
[ํ๋ก๊ทธ๋๋จธ์ค] level2. ์์ ๊ฒ์- ํ์ด์ฌ ๋ณธ๋ฌธ
A. ๋ฌธ์ ์ค๋ช
https://school.programmers.co.kr/learn/courses/30/lessons/72412?language=python3
๊ฐ ๋ฌธ์์กฐ๊ฑด์ ํด๋นํ๋ ์ฌ๋๋ค์ ์ซ์๋ฅผ ์์๋๋ก ๋ฐฐ์ด์ ๋ด์ returnํ๋ผ.
B. ๋ต์
from itertools import product
def solution(info, query):
answer = []
a= list(product(["cpp","java","python",""],["backend", "frontend",""],["junior","senior",""],["chicken", "pizza",""]))
a = [''.join(i) for i in a]
d = {i:[] for i in a}
for i in info:
arr = i.split(' ')
l= list(product([arr[0],''], [arr[1],''], [arr[2],''], [arr[3],'']))
l = [''.join(j) for j in l]
for j in l:
d[j].append(int(arr[4]))
for i in d.keys():
d[i].sort()
for q in query:
q = q.replace(' and ', '').replace('-','')
q = q.split(' ')
val = binsearch(d[q[0]], int(q[1]))
answer.append(len(d[q[0]])-val)
# print(binsearch([1,4,6,9,15,20,36], 39))
return answer
def binsearch(arr, val):
if len(arr) == 0:
return 0
if arr[0] >= val:
return 0
start = 0
end = len(arr)
while start < end-1:
mid = (start+end)//2
if arr[mid] < val:
start = mid
else :
end = mid
return end
C. ํ๊ณ
์์์๊ฐ : 1์๊ฐ 30๋ถ
์ด ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ ์์๋ก ํ์๋ค.
1.์ง์์ ์ ๋ณด ๊ธฐ๋กํ ์ ์๋ ๋์ ๋๋ฆฌ ์์ฑ : 4x3x3x3 ์กฐํฉ์ผ๋ก .
2.์ง์์ ์ ๋ณด ๊ธฐ๋ก : info ์ํํ๋ฉฐ ์กฐํฉ์์ฑํ๊ณ ๊ธฐ๋ก.
3.์กฐ๊ฑด์ ๋ง๋ ์ง์์ ์ ์ฐพ๊ธฐ: query์ํํ๋ฉฐ.
4.์ง์์ ์ ํจ์จ์ ์ผ๋ก ์ฐพ๊ธฐ: ์ด๋ถํ์ ์ฌ์ฉ.
- 1, 2๋ฒ์ product๋ฅผ ์ฌ์ฉํ๋ค. ๋ค๋ง, info๋ํ ์กฐํฉ์ ๊ตฌํด์ ์ ๋ณด๋ฅผ ๊ธฐ๋กํด์ผํ๋ค๋ ๊ฑธ ๋์ณ์ ์ข ํด๋งธ๋ค.
- 4๋ฒ์์ ์ข ์ค๋ ๊ฑธ๋ ธ๋ค. ์ด๋ถํ์์ ์ค์ค๋ก ๊ตฌํํด๋ณด์๋ค. ๋๋ฒ๊น ํด๊ฐ๋ฉด์ ์์ธ์กฐ๊ฑด์ ์ถ๊ฐํด ์ด ์ข๊ฒํต๊ณผํ๋ค. ํ์ง๋ง, ์ด๋ถํ์์ ์๋ฒฝํ ์๋๊ฒ์ด ์๋์ด์ ์ข ๋ ์ดํด๊ฐ ํ์ํ๋ค. ํนํ, ์์ธ์ฒ๋ฆฌ(arr ๊ธธ์ด๊ฐ 0์ผ ๋, arr์ ๋ง์ง๋ง ์์๋ณด๋ค ์ฐพ์ผ๋ ค๋ ๊ฐ์ด ํด ๋)๋ถ๋ถ์ด ์ ์ผ ๊น๋ค๋ก์ ๊ณ , ์ด ๋ถ๋ถ์ ๋๋ฒ๊น ์ด ์๋์์ผ๋ฉด ์ฐพ๊ธฐ๊ฐ ๋ถ๊ฐ๋ฅํ์ ๊ฒ์ด๋ค.
๊ทธ๋๋, ์ ์ฐจ ์ค๋ ฅ์ด ์ข์์ง๊ณ ์๋๊ฑธ ๋๋๋ค. '์ด๋ ๊ฒ ํ๋ฉด ๋๊ฒ ๋ค'๋ผ๊ณ ๋ ์ค๋ฅธ ์์ด๋์ด๊ฐ ๋๋ถ๋ถ ๋ค์ด๋ง๋๋ค. ๋ฌธ์ ์ ํ์ ํจํด์ด ๋ฐ๋ณต๋์ด์ ๊ทธ๋ฐ ๋ฏ ํ๋ค.
D. ๊ฐ์
from itertools import product
def solution(info, query):
answer = []
#1.์ง์์ ์ ๋ณด ๊ธฐ๋กํ ์ ์๋ ๋์
๋๋ฆฌ ์์ฑ : 4x3x3x3 ์กฐํฉ์ผ๋ก
a= list(product(["cpp","java","python",""],["backend", "frontend",""],["junior","senior",""],["chicken", "pizza",""]))
d = {i:[] for i in a}
#2.์ง์์ ์ ๋ณด ๊ธฐ๋ก
for i in info:
arr = i.split(' ')
l= list(product([arr[0],''], [arr[1],''], [arr[2],''], [arr[3],'']))
for j in l:
d[j].append(int(arr[4]))
for i in d.keys():
d[i].sort()
#3.์กฐ๊ฑด์ ๋ง๋ ์ง์์ ์ ์ฐพ๊ธฐ: query์ํํ๋ฉฐ
for q in query:
q = q.replace(' and', '').replace('-','')
q = tuple(q.split(' '))
arr = d[q[0:4]]
value = int(q[4])
#4.์ง์์ ์ ํจ์จ์ ์ผ๋ก ์ฐพ๊ธฐ: ๋ฐ์ด๋๋ฆฌ์์น์ฌ์ฉ
index = 0
if len(arr) == 0:
1==1
elif arr[-1] < value:
index = len(arr)
else:
index = binsearch(arr, int(q[4]), 0, len(arr)-1)
answer.append(len(arr)-index)
#๋๋ฒ๊น
์ฉ print(binsearch([1, 3, 9, 9, 9, 11, 13, 15, 19, 21, 25, 28], 29, 0, 11))
return answer
def binsearch(arr, score, left, right):
if left == right:
return left
mid = (left+right)//2
if arr[mid]<score:
return binsearch(arr, score, mid+1, right)
else:
return binsearch(arr, score, left, mid)
1. ๋์ ๋๋ฆฌ์ key๊ฐ์ ๊ตณ์ด ์คํธ๋ง์ผ๋ก ํ ํ์๊ฐ ์์๋ค. key๊ฐ์ผ๋ก ๋ถ๋ณ๊ฐ์ ๋ชจ๋ ๊ฐ๋ฅํ๋, tuple์ ์ฌ์ฉํ๋๊ฒ ์ฝ๋๊ฐ ๋ ๊ฐ๋จํด์ง๋ค.
2. ๋ฐ์ด๋๋ฆฌ ์์น๋ฅผ ์ฌ๊ท์์ผ๋ก ๊ตฌํํ๋ค. ์ฝ๋๊ฐ ๋ ๊ฐ์ํด์ก๋ค. ์ด ๋ถ๋ถ์ ์ด๋์ ๋ ์ธ์ฐ๋๊ฒ ํ์ํด๋ณด์ธ๋ค.
3. ๋๋ฒ๊น ํด๋ณด๋ฉด์ ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํด ๋ด๋ ๊ณผ์ ์๋ ์ต์ํด์ ธ์ผ๊ฒ ๋ค.
'Algorithm๐จ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] level2. ํผ๋ก๋- ํ์ด์ฌ (0) | 2025.04.15 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] level2. ์์ ์ฐพ๊ธฐ- ํ์ด์ฌ (0) | 2025.04.15 |
[ํ๋ก๊ทธ๋๋จธ์ค] level2. ํ๋ฐฐ ๋ฐฐ๋ฌ๊ณผ ์๊ฑฐํ๊ธฐ- ํ์ด์ฌ (0) | 2025.04.04 |
[ํ๋ก๊ทธ๋๋จธ์ค] level2. ์๊ถ๋ - ํ์ด์ฌ (0) | 2025.04.02 |
[ํ๋ก๊ทธ๋๋จธ์ค] level2. ํ๋ณดํค - ํ์ด์ฌ (0) | 2025.04.01 |