์ฝ๋ฉ ํ ์คํธ ์ฐ์ต - 2022 KAKAO BLIND RECRUITMENT
<์ฃผ์ฐจ ์๊ธ ๊ณ์ฐ>
๋ฌธ์ ์ค๋ช
์ฃผ์ฐจ์ฅ์ ์๊ธํ์ ์ฐจ๋์ด ๋ค์ด์ค๊ณ (์ ์ฐจ) ๋๊ฐ(์ถ์ฐจ) ๊ธฐ๋ก์ด ์ฃผ์ด์ก์ ๋, ์ฐจ๋๋ณ๋ก ์ฃผ์ฐจ ์๊ธ์ ๊ณ์ฐํ๋ ค๊ณ ํฉ๋๋ค. ์๋๋ ํ๋์ ์์๋ฅผ ๋ํ๋ ๋๋ค.
(ํ ์๋ต)
- ์ด๋ค ์ฐจ๋์ด ์ ์ฐจ ๋ ํ์ ์ถ์ฐจ๋ ๋ด์ญ์ด ์๋ค๋ฉด, 23:59์ ์ถ์ฐจ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค.
- 0000๋ฒ ์ฐจ๋์ 18:59์ ์ ์ฐจ ๋ ์ดํ, ์ถ์ฐจ๋ ๋ด์ญ์ด ์์ต๋๋ค. ๋ฐ๋ผ์, 23:59์ ์ถ์ฐจ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค.
- 00:00๋ถํฐ 23:59๊น์ง์ ์ /์ถ์ฐจ ๋ด์ญ์ ๋ฐํ์ผ๋ก ์ฐจ๋๋ณ ๋์ ์ฃผ์ฐจ ์๊ฐ์ ๊ณ์ฐํ์ฌ ์๊ธ์ ์ผ๊ด๋ก ์ ์ฐํฉ๋๋ค.
- ๋์ ์ฃผ์ฐจ ์๊ฐ์ด ๊ธฐ๋ณธ ์๊ฐ ์ดํ๋ผ๋ฉด, ๊ธฐ๋ณธ์๊ธ์ ์ฒญ๊ตฌํฉ๋๋ค.
- ๋์ ์ฃผ์ฐจ ์๊ฐ์ด ๊ธฐ๋ณธ ์๊ฐ์ ์ด๊ณผํ๋ฉด, ๊ธฐ๋ณธ์๊ธ์ ๋ํด์, ์ด๊ณผํ ์๊ฐ์ ๋ํด์ ๋จ์ ์๊ฐ๋ง๋ค ๋จ์ ์๊ธ์ ์ฒญ๊ตฌํฉ๋๋ค.
- ์ด๊ณผํ ์๊ฐ์ด ๋จ์ ์๊ฐ์ผ๋ก ๋๋์ด ๋จ์ด์ง์ง ์์ผ๋ฉด, ์ฌ๋ฆผ ํฉ๋๋ค.
- ⌈a⌉ : a๋ณด๋ค ์์ง ์์ ์ต์์ ์ ์๋ฅผ ์๋ฏธํฉ๋๋ค. ์ฆ, ์ฌ๋ฆผ์ ์๋ฏธํฉ๋๋ค.
์ฃผ์ฐจ ์๊ธ์ ๋ํ๋ด๋ ์ ์ ๋ฐฐ์ด fees, ์๋์ฐจ์ ์ /์ถ์ฐจ ๋ด์ญ์ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด records๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ฐจ๋ ๋ฒํธ๊ฐ ์์ ์๋์ฐจ๋ถํฐ ์ฒญ๊ตฌํ ์ฃผ์ฐจ ์๊ธ์ ์ฐจ๋ก๋๋ก ์ ์ ๋ฐฐ์ด์ ๋ด์์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
fees์ ๊ธธ์ด = 4
- fees [0] = ๊ธฐ๋ณธ ์๊ฐ(๋ถ)
- 1 ≤ fees [0] ≤ 1,439
- fees [1] = ๊ธฐ๋ณธ์๊ธ(์)
- 0 ≤ fees [1] ≤ 100,000
- fees [2] = ๋จ์ ์๊ฐ(๋ถ)
- 1 ≤ fees [2] ≤ 1,439
- fees [3] = ๋จ์ ์๊ธ(์)
- 1 ≤ fees [3] ≤ 10,000
1 ≤ records์ ๊ธธ์ด ≤ 1,000
- records์ ๊ฐ ์์๋ "์๊ฐ ์ฐจ๋๋ฒํธ ๋ด์ญ" ํ์์ ๋ฌธ์์ด์ ๋๋ค.
- ์๊ฐ, ์ฐจ๋๋ฒํธ, ๋ด์ญ์ ํ๋์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์์ต๋๋ค.
- ์๊ฐ์ ์ฐจ๋์ด ์ ์ฐจ ๋๊ฑฐ๋ ์ถ์ฐจ๋ ์๊ฐ์ ๋ํ๋ด๋ฉฐ, HH:MMํ์์ ๊ธธ์ด 5์ธ ๋ฌธ์์ด์ ๋๋ค.
- HH:MM์ 00:00๋ถํฐ 23:59๊น์ง ์ฃผ์ด์ง๋๋ค.
- ์๋ชป๋ ์๊ฐ("25:22", "09:65" ๋ฑ)์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- ์ฐจ๋๋ฒํธ๋ ์๋์ฐจ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ, `0'~'9'๋ก ๊ตฌ์ฑ๋ ๊ธธ์ด 4์ธ ๋ฌธ์์ด์ ๋๋ค.
- ๋ด์ญ์ ๊ธธ์ด 2 ๋๋ 3์ธ ๋ฌธ์์ด๋ก, IN ๋๋ OUT์ ๋๋ค. IN์ ์ ์ฐจ๋ฅผ, OUT์ ์ถ์ฐจ๋ฅผ ์๋ฏธํฉ๋๋ค.
- records์ ์์๋ค์ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์ฃผ์ด์ง๋๋ค.
- records๋ ํ๋ฃจ ๋์์ ์ /์ถ์ฐจ๋ ๊ธฐ๋ก๋ง ๋ด๊ณ ์์ผ๋ฉฐ, ์ ์ฐจ ๋ ์ฐจ๋์ด ๋ค์๋ ์ถ์ฐจ๋๋ ๊ฒฝ์ฐ๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- ๊ฐ์ ์๊ฐ์, ๊ฐ์ ์ฐจ๋๋ฒํธ์ ๋ด์ญ์ด 2๋ฒ ์ด์ ๋ํ๋ด์ง ์์ต๋๋ค.
- ๋ง์ง๋ง ์๊ฐ(23:59)์ ์ ์ฐจ ๋๋ ๊ฒฝ์ฐ๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- ์๋์ ์๋ฅผ ํฌํจํ์ฌ, ์๋ชป๋ ์ ๋ ฅ์ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- ์ฃผ์ฐจ์ฅ์ ์๋ ์ฐจ๋์ด ์ถ์ฐจ๋๋ ๊ฒฝ์ฐ
- ์ฃผ์ฐจ์ฅ์ ์ด๋ฏธ ์๋ ์ฐจ๋(์ฐจ๋๋ฒํธ๊ฐ ๊ฐ์ ์ฐจ๋)์ด ๋ค์ ์ ์ฐจ ๋๋ ๊ฒฝ์ฐ
๋ฌธ์ ํ์ด
- my solution
def solution(fees, records):
answer = []
dict={} # ์ฐจ ๋ฒํธ: ๋์ ์ฃผ์ฐจ ์๊ฐ
temp={} # ์ฐจ ๋ฒํธ: ์
์ฐจ ์๊ฐ
for i in records:
x=i.split()
if x[2]=="IN":
if x[1] not in dict:
dict[x[1]]=0
temp[x[1]]=x[0] # ์
์ฐจ ์๊ฐ
else: #์๊ฐ ๊ณ์ฐ
outtime=list(map(int,x[0].split(":")))
intime=list(map(int, temp[x[1]].split(":")))
del temp[x[1]]
time=(outtime[0]-intime[0])*60+(outtime[1]-intime[1])
dict[x[1]]+=time
for key,value in temp.items(): #23:59๋ถ ์ถ์ฐจ
intime=list(map(int, value.split(":")))
outtime=[23,59]
time=(outtime[0]-intime[0])*60+(outtime[1]-intime[1])
dict[key]+=time
for key,value in dict.items():
result=fees[1] #๊ธฐ๋ณธ ์๊ธ
if value-fees[0]>0: #๊ธฐ๋ณธ ์๊ธ ์ด๊ณผ์
if (value-fees[0])%fees[2]!=0:
result+=(((value-fees[0])//fees[2])+1)*fees[3]
else:
result+=((value-fees[0])//fees[2])*fees[3]
dict[key]=result # ์ฐจ ๋ฒํธ: ์ฃผ์ฐจ ์๊ธ
dict=sorted(dict.items()) #์ฐจ๋ ๋ฒํธ๊ฐ ์์ ์๋์ฐจ๋ถํฐ
for i in dict: #list
answer.append(i[1])
return answer
1) IN์ผ ๋ ์ฐจ ๋ฒํธ์ ํด๋นํ๋ key ๊ฐ์ด ์์ผ๋ฉด key, value ์์ฑ/ ์ ์ฐจ ์๊ฐ์ ๋ฐ๋ก ์ ์ฅ
2) OUT์ผ ๋ IN ์๊ฐ ๊ณ์ฐํ์ฌ dict์ ์ฐจ ๋ฒํธ: ์๊ฐ์ผ๋ก ๋ฃ์ด์ค
3) IN๋ง ์๊ณ OUT์ด ์๋ ๊ฒ ์ฒ๋ฆฌ
4) ์๊ธ ๊ณ์ฐ
5) ์ฐจ๋ ๋ฒํธ๊ฐ ์์ ์๋์ฐจ๋ถํฐ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ ๋ ฌ
์๊ฐ๐ค
์ด ๋ฌธ์ ๋ 2022 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ํ์์ ํด๊ฒฐํ๋ ๋ฌธ์ ์ด๋ค.
๋จผ์ ๋ค์ ํ๊ณ ์์ ์ ์ ์ถํ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ ๊ฑฐ์ ๋น์ทํ์๋ค.
๋ด ๋จธ๋ฆฌ์์ ๋์จ ๊ฑฐ๋๊น.. ^^..
์ด ๋ฌธ์ ๊ฐ Level 2์๋ค๋..
์ถ์ฒ: ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉ ํ ์คํธ ์ฐ์ต, https://programmers.co.kr/learn/challenges
'๐Algorithm > ๐ฅprogrammers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[programmers] JOIN๋ฌธ - SQL ๊ณ ๋์ Kit (0) | 2022.02.06 |
---|---|
[programmers] ๊ฐ์ฅ ๋จผ ๋ ธ๋ (0) | 2022.02.03 |
[programmers] ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ - 2022 KAKAO BLIND RECRUITMENT (0) | 2022.01.17 |
[programmers] GROUP BY๋ฌธ - SQL ๊ณ ๋์ Kit (0) | 2022.01.17 |
[programmers] IS NULL๋ฌธ - SQL ๊ณ ๋์ Kit (0) | 2022.01.15 |