๐ŸŒžAlgorithm/๐Ÿ”ฅprogrammers

[programmers] ์‹ ๊ณ  ๊ฒฐ๊ณผ ๋ฐ›๊ธฐ - 2022 KAKAO BLIND RECRUITMENT

๋ฟŒ์•ผ._. 2022. 1. 18. 23:09

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์—ฐ์Šต - 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