๐กsolutions )
๐ฌ ํด๋น ๋ฌธ์ ๋ ์ ํ์ฑ๊ณผ ํจ์จ์ฑ ๋ชจ๋ ๋ง์กฑํด์ผ ํ๋ ๋ฌธ์ ๋ค.
๐ฌ ์ฒ์ ์์ฑํ๋ ์ฝ๋๋ ์ ํ์ฑ๋ง ํต๊ณผํ๊ณ , ํจ์จ์ฑ์ ๋ง์กฑํ์ง ๋ชปํ๋ค. for๋ฌธ์ ํตํด ์ฃผ์ด์ง query์ ๋ณด์ info๋ฅผ ๋ชจ๋ ๋น๊ตํ์ฌ ๋ง์กฑํ๋ ์ง์์๊ฐ ๋ช ๋ช ์ธ์ง ๊ตฌํ๋ฉด ์ ํ์ฑ์ ์ฝ๊ฒ ํ ์ ์๋ค.
๐ฌ ๋ฌธ์ ๋ ํจ์จ์ฑ. ํผ์์ ํด๊ฒฐํ์ง ๋ชปํด์ '์นด์นด์ค ํ ํฌ ๋ธ๋ก๊ทธ'์ ๋ค๋ฅธ ๋ถ์ ํ์ด๋ฅผ ์ฐธ๊ณ ํ๋ฉฐ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ดค๋ค.
๐ฌ ๋จผ์ , ํด์๋งต์ ํ์ฉํด ์ง์์๋ค์ ์ ๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฅํด๋๋ ๋ก์ง์ด ํ์ํ๋ค. -> ์ฃผ์ด์ง info ์ ๋ณด๋ฅผ key๊ฐ์ผ๋ก ์ ์๋ฅผ value๋ก ํ์ฌ ๋์ ๋๋ฆฌ์ ์ ์ฅ -> ํ๋์ info์ ์ด 16๊ฐ์ง์ ๊ฒฝ์ฐ์ ์๊ฐ ๋ง๋ค์ด์ง๋ค. -> info์์ '-'๋ฅผ ๊ณ ๋ คํ๋ ๊ฒฝ์ฐ๋ ๋ฐ๋ก '-'๋ฌธ์๋ฅผ ๋ฃ์ง ์๊ณ ์ฃผ์ด์ง info ์กฐ๊ฑด๋ค๋ง์ ๋ชจ์ key๊ฐ์ ๋ง๋ค์๋ค.
e.g) python - junior pizza์ธ ๊ฒฝ์ฐ 'python-juniorpizza'๊ฐ ์๋ 'pythonjuniorpizza'๋ก ๋ง๋๋ ์
ํ์์ ๊ฒฝ์ฐ๋ ์ถํ query๋ฌธ์์ '-'๋ฅผ ์ ๊ฑฐํ๊ธฐ ๋๋ฌธ์ query ์กฐ๊ฑด๊ณผ info ์ ๋ณด๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๋น๊ตํ ์ ์์๋ค.
๐ฌ query์กฐ๊ฑด๊ณผ info ์ ๋ณด๊ฐ ์ผ์นํ๋ ๊ฒฝ์ฐ query_score๋ณด๋ค ๋์ ์ ์์ ์ง์์๊ฐ ๋ช ๋ช ์ธ์ง ๊ตฌํ๊ธฐ ์ํด binary search๋ฅผ ์ฌ์ฉํ๋ค. -> ์ด๋ฅผ ์ํด info_dict์ value๊ฐ๋ค์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ค.
๐ฌlower bound ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ query_score๋ณด๋ค ๋์ ์ ์์ ์ง์์๊ฐ ๋ช ๋ช ์ธ์ง ๊ตฌํ๋ค.
lower bound ? binary search์์ ํ์๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก '์ํ๋ ๊ฐ ์ด์์ด ์ฒ์ ๋์ค๋ ์์น๋ฅผ ์ฐพ๋ ๊ณผ์ '์ด๋ค.
๐จ๐ปcode )
# ์ ํ์ฑ, ํจ์จ์ฑ ๋ชจ๋ ํต๊ณผํ ์ฝ๋๐
from itertools import combinations as combi
from collections import defaultdict
# ์ ์๋ฅผ ์ ์ธํ info ์ ๋ณด๋ฅผ key๊ฐ์ผ๋ก, ์ ์๋ฅผ value๊ฐ์ผ๋ก ํด์๋งต ์์ฑ
def solution(infos, queries):
answer = []
info_dict = defaultdict(list)
for info in infos:
info = info.split()
info_key = info[:-1]
info_val = int(info[-1])
for i in range(5):
for c in combi(info_key, i): # ํ๋์ info์์ ๊ฒฝ์ฐ์ ์ 16๊ฐ ๋ง๋ค๊ธฐ
tmp_key = ''.join(c)
info_dict[tmp_key].append(info_val) # ๊ฐ๋ฅํ info ์กฐํฉ์ key, ์ ์๋ฅผ value๋ก ๋์
๋๋ฆฌ ์ ์ฅ
for key in info_dict.keys():
info_dict[key].sort() # value๊ฐ ์ ์๋ค์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ฆฌ
for query in queries:
query = query.split(' ')
query_score = int(query[-1])
query = query[:-1]
for i in range(3): # and ์ ๊ฑฐ
query.remove('and')
while '-' in query: # '-'์ ๊ฑฐ
query.remove('-')
tmp_q = ''.join(query)
# lower bound ์ฌ์ฉํด query_score ๋ณด๋ค ํฐ ์ ์๋ค์ ๊ฐ์ ๊ตฌํ๊ธฐ
if tmp_q in info_dict:
scores = info_dict[tmp_q]
if len(scores) > 0:
start, end = 0, len(scores)
while end > start:
mid = (start + end) // 2
if scores[mid] >= query_score:
end = mid
else:
start = mid + 1
answer.append(len(scores) - start)
else:
answer.append(0)
return answer
# ์ ํ์ฑ๋ง ํต๊ณผํ ์ฝ๋ ๐
def solution(info, query):
infos = [i.split() for i in info]
queries = [] # ๊ฐ ์์ 8๊ฐ์ฉ
for q in query:
q = q.split()
for i in range(3):
q.remove('and')
queries.append(q)
res = [0] * len(query)
for i in range(len(queries)):
for info_item in infos:
for k in range(5):
if queries[i][k] == '-':
continue
elif k == 4:
if int(info_item[k]) >= int(queries[i][k]):
res[i] += 1
elif info_item[k] != queries[i][k]:
break
return res
๐description )
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์์ ๊ฒ์
["java backend junior pizza 150","python frontend senior chicken 210","python frontend senior chicken 150","cpp backend senior pizza 260","java backend junior chicken 80","python backend senior chicken 50"] ["java and backend and junior and pizza 100","pyt
programmers.co.kr
์นด์นด์ค๋ ํ๋ฐ๊ธฐ ๊ฒฝ๋ ฅ ๊ฐ๋ฐ์ ๊ณต๊ฐ์ฑ์ฉ์ ์งํ ์ค์ ์์ผ๋ฉฐ ํ์ฌ ์ง์์ ์ ์์ ์ฝ๋ฉํ ์คํธ๊ฐ ์ข ๋ฃ๋์์ต๋๋ค. ์ด๋ฒ ์ฑ์ฉ์์ ์ง์์๋ ์ง์์ ์์ฑ ์ ์๋์ ๊ฐ์ด 4๊ฐ์ง ํญ๋ชฉ์ ๋ฐ๋์ ์ ํํ๋๋ก ํ์์ต๋๋ค.
- ์ฝ๋ฉํ ์คํธ ์ฐธ์ฌ ๊ฐ๋ฐ์ธ์ด ํญ๋ชฉ์ cpp, java, python ์ค ํ๋๋ฅผ ์ ํํด์ผ ํฉ๋๋ค.
- ์ง์ ์ง๊ตฐ ํญ๋ชฉ์ backend์ frontend ์ค ํ๋๋ฅผ ์ ํํด์ผ ํฉ๋๋ค.
- ์ง์ ๊ฒฝ๋ ฅ๊ตฌ๋ถ ํญ๋ชฉ์ junior์ senior ์ค ํ๋๋ฅผ ์ ํํด์ผ ํฉ๋๋ค.
- ์ ํธํ๋ ์์ธํธ๋๋ก chicken๊ณผ pizza ์ค ํ๋๋ฅผ ์ ํํด์ผ ํฉ๋๋ค.
์ธ์ฌ์์ ํ์ ๊ทผ๋ฌดํ๊ณ ์๋ ๋๋์ฆ๋ ์ฝ๋ฉํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๋ถ์ํ์ฌ ์ฑ์ฉ์ ์ฐธ์ฌํ ๊ฐ๋ฐํ๋ค์ ์ ๊ณตํ๊ธฐ ์ํด ์ง์์๋ค์ ์ง์ ์กฐ๊ฑด์ ์ ํํ๋ฉด ํด๋น ์กฐ๊ฑด์ ๋ง๋ ์ง์์๊ฐ ๋ช ๋ช ์ธ ์ง ์ฝ๊ฒ ์ ์ ์๋ ๋๊ตฌ๋ฅผ ๋ง๋ค๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ๋ฐํ์์ ๊ถ๊ธํดํ๋ ๋ฌธ์์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ ํํ๊ฐ ๋ ์ ์์ต๋๋ค. ์ฝ๋ฉํ ์คํธ์ java๋ก ์ฐธ์ฌํ์ผ๋ฉฐ, backend ์ง๊ตฐ์ ์ ํํ๊ณ , junior ๊ฒฝ๋ ฅ์ด๋ฉด์, ์์ธํธ๋๋ก pizza๋ฅผ ์ ํํ ์ฌ๋ ์ค ์ฝ๋ฉํ ์คํธ ์ ์๋ฅผ 50์ ์ด์ ๋ฐ์ ์ง์์๋ ๋ช ๋ช ์ธ๊ฐ? ๋ฌผ๋ก ์ด ์ธ์๋ ๊ฐ ๊ฐ๋ฐํ์ ์ํฉ์ ๋ฐ๋ผ ์๋์ ๊ฐ์ด ๋ค์ํ ํํ์ ๋ฌธ์๊ฐ ์์ ์ ์์ต๋๋ค.
- ์ฝ๋ฉํ ์คํธ์ python์ผ๋ก ์ฐธ์ฌํ์ผ๋ฉฐ, frontend ์ง๊ตฐ์ ์ ํํ๊ณ , senior ๊ฒฝ๋ ฅ์ด๋ฉด์, ์์ธํธ๋๋ก chicken์ ์ ํํ ์ฌ๋ ์ค ์ฝ๋ฉํ ์คํธ ์ ์๋ฅผ 100์ ์ด์ ๋ฐ์ ์ฌ๋์ ๋ชจ๋ ๋ช ๋ช ์ธ๊ฐ?
- ์ฝ๋ฉํ ์คํธ์ cpp๋ก ์ฐธ์ฌํ์ผ๋ฉฐ, senior ๊ฒฝ๋ ฅ์ด๋ฉด์, ์์ธํธ๋๋ก pizza๋ฅผ ์ ํํ ์ฌ๋ ์ค ์ฝ๋ฉํ ์คํธ ์ ์๋ฅผ 100์ ์ด์ ๋ฐ์ ์ฌ๋์ ๋ชจ๋ ๋ช ๋ช ์ธ๊ฐ?
- backend ์ง๊ตฐ์ ์ ํํ๊ณ , senior ๊ฒฝ๋ ฅ์ด๋ฉด์ ์ฝ๋ฉํ ์คํธ ์ ์๋ฅผ 200์ ์ด์ ๋ฐ์ ์ฌ๋์ ๋ชจ๋ ๋ช ๋ช ์ธ๊ฐ?
- ์์ธํธ๋๋ก chicken์ ์ ํํ ์ฌ๋ ์ค ์ฝ๋ฉํ ์คํธ ์ ์๋ฅผ 250์ ์ด์ ๋ฐ์ ์ฌ๋์ ๋ชจ๋ ๋ช ๋ช ์ธ๊ฐ?
- ์ฝ๋ฉํ ์คํธ ์ ์๋ฅผ 150์ ์ด์ ๋ฐ์ ์ฌ๋์ ๋ชจ๋ ๋ช ๋ช ์ธ๊ฐ?
[๋ฌธ์ ]
์ง์์๊ฐ ์ง์์์ ์ ๋ ฅํ 4๊ฐ์ง์ ์ ๋ณด์ ํ๋ํ ์ฝ๋ฉํ ์คํธ ์ ์๋ฅผ ํ๋์ ๋ฌธ์์ด๋ก ๊ตฌ์ฑํ ๊ฐ์ ๋ฐฐ์ด info, ๊ฐ๋ฐํ์ด ๊ถ๊ธํดํ๋ ๋ฌธ์์กฐ๊ฑด์ด ๋ฌธ์์ด ํํ๋ก ๋ด๊ธด ๋ฐฐ์ด query๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฐ ๋ฌธ์์กฐ๊ฑด์ ํด๋นํ๋ ์ฌ๋๋ค์ ์ซ์๋ฅผ ์์๋๋ก ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.