๐ŸŒžAlgorithm/๐Ÿ”ฅprogrammers

[programmers] [3์ฐจ] ๋ฐฉ๊ธˆ๊ทธ๊ณก - 2018 KAKAO BLIND RECRUITMENT

๋ฟŒ์•ผ._. 2021. 12. 2. 17:47

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์—ฐ์Šต - 2018 KAKAO BLIND RECRUITMENT

 


<[3์ฐจ] ๋ฐฉ๊ธˆ ๊ทธ ๊ณก>

๋ฌธ์ œ ์„ค๋ช…

 

๋ผ๋””์˜ค๋ฅผ ์ž์ฃผ ๋“ฃ๋Š” ๋„ค์˜ค๋Š” ๋ผ๋””์˜ค์—์„œ ๋ฐฉ๊ธˆ ๋‚˜์™”๋˜ ์Œ์•…์ด ๋ฌด์Šจ ์Œ์•…์ธ์ง€ ๊ถ๊ธˆํ•ด์งˆ ๋•Œ๊ฐ€ ๋งŽ๋‹ค. ๊ทธ๋Ÿด ๋•Œ ๋„ค์˜ค๋Š” ๋‹ค์Œ ํฌํ„ธ์˜ '๋ฐฉ๊ธˆ ๊ทธ ๊ณก' ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๊ณค ํ•œ๋‹ค. ๋ฐฉ๊ธˆ ๊ทธ ๊ณก์—์„œ๋Š” TV, ๋ผ๋””์˜ค ๋“ฑ์—์„œ ๋‚˜์˜จ ์Œ์•…์— ๊ด€ํ•ด ์ œ๋ชฉ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค์ด๋‹ค.
๋„ค์˜ค๋Š” ์ž์‹ ์ด ๊ธฐ์–ตํ•œ ๋ฉœ๋กœ๋””๋ฅผ ๊ฐ€์ง€๊ณ  ๋ฐฉ๊ธˆ ๊ทธ ๊ณก์„ ์ด์šฉํ•ด ์Œ์•…์„ ์ฐพ๋Š”๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ผ๋””์˜ค ๋ฐฉ์†ก์—์„œ๋Š” ํ•œ ์Œ์•…์„ ๋ฐ˜๋ณตํ•ด์„œ ์žฌ์ƒํ•  ๋•Œ๋„ ์žˆ์–ด์„œ ๋„ค์˜ค๊ฐ€ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋Š” ๋ฉœ๋กœ๋””๋Š” ์Œ์•… ๋๋ถ€๋ถ„๊ณผ ์ฒ˜์Œ ๋ถ€๋ถ„์ด ์ด์–ด์„œ ์žฌ์ƒ๋œ ๋ฉœ๋กœ๋””์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ, ํ•œ ์Œ์•…์„ ์ค‘๊ฐ„์— ๋Š์„ ๊ฒฝ์šฐ ์›๋ณธ ์Œ์•…์—๋Š” ๋„ค์˜ค๊ฐ€ ๊ธฐ์–ตํ•œ ๋ฉœ๋กœ๋””๊ฐ€ ๋“ค์–ด์žˆ๋‹ค ํ•ด๋„ ๊ทธ ๊ณก์ด ๋„ค์˜ค๊ฐ€ ๋“ค์€ ๊ณก์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋„ค์˜ค๋Š” ๊ธฐ์–ตํ•œ ๋ฉœ๋กœ๋””๋ฅผ ์žฌ์ƒ ์‹œ๊ฐ„๊ณผ ์ œ๊ณต๋œ ์•…๋ณด๋ฅผ ์ง์ ‘ ๋ณด๋ฉด์„œ ๋น„๊ตํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ€์ •์„ ํ•  ๋•Œ ๋„ค์˜ค๊ฐ€ ์ฐพ์œผ๋ ค๋Š” ์Œ์•…์˜ ์ œ๋ชฉ์„ ๊ตฌํ•˜์—ฌ๋ผ.

- ๋ฐฉ๊ธˆ ๊ทธ ๊ณก ์„œ๋น„์Šค์—์„œ๋Š” ์Œ์•… ์ œ๋ชฉ, ์žฌ์ƒ์ด ์‹œ์ž‘๋˜๊ณ  ๋๋‚œ ์‹œ๊ฐ, ์•…๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
- ๋„ค์˜ค๊ฐ€ ๊ธฐ์–ตํ•œ ๋ฉœ๋กœ๋””์™€ ์•…๋ณด์— ์‚ฌ์šฉ๋˜๋Š” ์Œ์€ C, C#, D, D#, E, F, F#, G, G#, A, A#, B 12๊ฐœ์ด๋‹ค.
- ๊ฐ ์Œ์€ 1๋ถ„์— 1๊ฐœ์”ฉ ์žฌ์ƒ๋œ๋‹ค. ์Œ์•…์€ ๋ฐ˜๋“œ์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์žฌ์ƒ๋˜๋ฉฐ ์Œ์•… ๊ธธ์ด๋ณด๋‹ค ์žฌ์ƒ๋œ ์‹œ๊ฐ„์ด ๊ธธ ๋•Œ๋Š” ์Œ์•…์ด ๋Š๊น€ ์—†์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฐ˜๋ณตํ•ด์„œ ์žฌ์ƒ๋œ๋‹ค. ์Œ์•… ๊ธธ์ด๋ณด๋‹ค ์žฌ์ƒ๋œ ์‹œ๊ฐ„์ด ์งง์„ ๋•Œ๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ์žฌ์ƒ ์‹œ๊ฐ„๋งŒํผ๋งŒ ์žฌ์ƒ๋œ๋‹ค.
- ์Œ์•…์ด 00:00์„ ๋„˜๊ฒจ์„œ๊นŒ์ง€ ์žฌ์ƒ๋˜๋Š” ์ผ์€ ์—†๋‹ค.
- ์กฐ๊ฑด์ด ์ผ์น˜ํ•˜๋Š” ์Œ์•…์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๋•Œ์—๋Š” ๋ผ๋””์˜ค์—์„œ ์žฌ์ƒ๋œ ์‹œ๊ฐ„์ด ์ œ์ผ ๊ธด ์Œ์•… ์ œ๋ชฉ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์žฌ์ƒ๋œ ์‹œ๊ฐ„๋„ ๊ฐ™์„ ๊ฒฝ์šฐ ๋จผ์ € ์ž…๋ ฅ๋œ ์Œ์•… ์ œ๋ชฉ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
- ์กฐ๊ฑด์ด ์ผ์น˜ํ•˜๋Š” ์Œ์•…์ด ์—†์„ ๋•Œ์—๋Š” “(None)”์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์ž…๋ ฅ ํ˜•์‹

 

์ž…๋ ฅ์œผ๋กœ ๋„ค์˜ค๊ฐ€ ๊ธฐ์–ตํ•œ ๋ฉœ๋กœ๋””๋ฅผ ๋‹ด์€ ๋ฌธ์ž์—ด m๊ณผ ๋ฐฉ์†ก๋œ ๊ณก์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด musicinfos๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
- m์€ ์Œ 1๊ฐœ ์ด์ƒ 1439๊ฐœ ์ดํ•˜๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
- musicinfos๋Š” 100๊ฐœ ์ดํ•˜์˜ ๊ณก ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด๋กœ, ๊ฐ๊ฐ์˜ ๊ณก ์ •๋ณด๋Š” ์Œ์•…์ด ์‹œ์ž‘ํ•œ ์‹œ๊ฐ, ๋๋‚œ ์‹œ๊ฐ, ์Œ์•… ์ œ๋ชฉ, ์•…๋ณด ์ •๋ณด๊ฐ€ ', '๋กœ ๊ตฌ๋ถ„๋œ ๋ฌธ์ž์—ด์ด๋‹ค.
  - ์Œ์•…์˜ ์‹œ์ž‘ ์‹œ๊ฐ๊ณผ ๋๋‚œ ์‹œ๊ฐ์€ 24์‹œ๊ฐ„ HH:MM ํ˜•์‹์ด๋‹ค.
  - ์Œ์•… ์ œ๋ชฉ์€ ', ' ์ด์™ธ์˜ ์ถœ๋ ฅ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž๋กœ ํ‘œํ˜„๋œ ๊ธธ์ด 1 ์ด์ƒ 64 ์ดํ•˜์˜ ๋ฌธ์ž์—ด์ด๋‹ค.
  - ์•…๋ณด ์ •๋ณด๋Š” ์Œ 1๊ฐœ ์ด์ƒ 1439๊ฐœ ์ดํ•˜๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

 

์ถœ๋ ฅ ํ˜•์‹

 

์กฐ๊ฑด๊ณผ ์ผ์น˜ํ•˜๋Š” ์Œ์•… ์ œ๋ชฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

   - my solution

def solution(m, musicinfos):
    answer = ''
    
    arr=[]
    for i in musicinfos:
        temp=i.split(',') 
        start=temp[0].split(':') # ์Œ์•… ์‹œ์ž‘ ์‹œ๊ฐ„
        end=temp[1].split(':') # ์Œ์•… ๋๋‚œ ์‹œ๊ฐ
        min=(int(end[0])-int(start[0]))*60 + int(end[1])-int(start[1]) # ์Œ์•… ์žฌ์ƒ ์‹œ๊ฐ„
        
        result=''
        for j in range(len(temp[3])): # ,์™€ ๊ณต๋ฐฑ์œผ๋กœ ์•…๋ณด ๊ตฌ๋ถ„
            if j!=len(temp[3])-1 and temp[3][j+1]!='#':
                result+=temp[3][j]+', '
            else:
                if j==len(temp[3])-1:
                    result+=temp[3][j]+','
                else:
                    result+=temp[3][j]
        k=result.split(' ')
        

        music=(min//len(k))*k + k[:(min%len(k))] # ์žฌ์ƒ ์‹œ๊ฐ„ ๋งŒํผ ์•…๋ณด ๊ทธ๋ฆฌ๊ธฐ
        music=' '.join(music)
                
        arr.append([min,temp[2],music]) # list: ์žฌ์ƒ ์‹œ๊ฐ„, ์Œ์•… ์ œ๋ชฉ, ์•…๋ณด 

    
    result=''
    for i in range(len(m)): # ,์™€ ๊ณต๋ฐฑ์œผ๋กœ ์ž์‹ ์ด ๊ธฐ์–ตํ•˜๋Š” ๋ฉœ๋กœ๋”” ๊ตฌ๋ถ„
        if i!=len(m)-1 and m[i+1]!='#':
            result+=m[i]+', '
        else:
            result+=m[i]
    result+=','
    
    
    mmax=-1
    for i in arr: # ์กฐ๊ฑด๊ณผ ์ผ์น˜ํ•˜๋Š” ์Œ์•… ์ œ๋ชฉ ์ฐพ๊ธฐ
        if result in i[2]:
            if mmax<i[0]:
                mmax=i[0]
                answer=i[1]
    
    if answer=='': # ์กฐ๊ฑด์ด ์ผ์น˜ํ•˜๋Š” ์Œ์•…์ด ์—†๋Š” ๊ฒฝ์šฐ
        answer='(None)'

    return answer

 

 

1) ๊ณก์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด ํƒ์ƒ‰ : (์žฌ์ƒ ์‹œ๊ฐ„ = ์Œ์•… ๋๋‚œ ์‹œ๊ฐ„ - ์Œ์•… ์‹œ์ž‘ ์‹œ๊ฐ„), (์žฌ์ƒ ์‹œ๊ฐ„๋งŒํผ ์•…๋ณด ๊ตฌํ•˜๊ธฐ)

- list์— (์žฌ์ƒ ์‹œ๊ฐ„, ์Œ์•… ์ œ๋ชฉ, ์žฌ์ƒ ์‹œ๊ฐ„๋งŒํผ์˜ ์•…๋ณด) ์ถ”๊ฐ€

2) ์ž์‹ ์ด ๊ธฐ์–ตํ•˜๋Š” ๋ฉœ๋กœ๋”” ', '์™€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ€

3) ์กฐ๊ฑด๊ณผ ์ผ์น˜ํ•˜๋Š” ์Œ์•… ์ œ๋ชฉ ์ฐพ๊ธฐ : ์กฐ๊ฑด ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ์žฌ์ƒ์‹œ๊ฐ„์ด ๊ธด ์Œ์•…, ๋จผ์ € ์ž…๋ ฅ๋œ ์Œ์•… ์ˆœ

4) ์กฐ๊ฑด๊ณผ ์ผ์น˜ํ•˜๋Š” ์Œ์•…์ด ์—†์œผ๋ฉด '(None)' ์ถœ๋ ฅ


์ƒ๊ฐ๐Ÿค”

 

์ด ๋ฌธ์ œ์—์„œ ์กฐ๊ธˆ ์ƒ๊ฐํ•ด์•ผ ํ–ˆ๋˜ ๋ถ€๋ถ„์€ ์•…๋ณด์—์„œ #์ด ๋ถ™์€ ๊ฒฝ์šฐ์˜€๋‹ค.

์–ด๋–ป๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž˜ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„๊นŒ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ์ œ์ผ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ธ ', '์™€ ๊ณต๋ฐฑ์„ ์‚ฌ์šฉํ•ด์„œ ๊ตฌ๋ถ„ํ•˜์ž๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

์ด์ œ ์™€์„œ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๊ณต๋ฐฑ๋งŒ์œผ๋กœ๋„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์—ˆ์„ ํ…๋ฐ, ์™œ ', '๊นŒ์ง€ ํ–ˆ๋Š”๊ฐ€...

 

๋ฌธ์ œ๋ฅผ ํ’€ ๋‹น์‹œ ', '๋ฅผ ๋„ฃ๊ณ  in์œผ๋กœ ์กฐ๊ฑด๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ๊ตฌ๋ถ„ํ•˜๋‹ˆ ๋‹น์—ฐํžˆ #์„ ๊ตฌ๋ถ„ํ•˜์ง€ ๋ชปํ•ด ์ œ๋Œ€๋กœ ๋œ ๊ฐ’์ด ๋‚˜์˜ค์ง€ ์•Š์•˜๋‹ค.

๊ณต๋ฐฑ์„ ๋„ฃ๋Š”๋‹ค๋ฉด 'C '์™€ 'C# '์ด ๋‹ค๋ฅด๊ฒŒ ๋ฐ›์•„๋“ค์—ฌ์ง€์ง€ ์•Š๊ฒ ๋Š”๊ฐ€ ํ•ด์„œ ์›๋ž˜ ์ฝ”๋“œ์— ๊ณต๋ฐฑ์„ ์ถ”๊ฐ€๋กœ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

 

์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์ง€ ์•Š์„๊นŒ ์‚ด์ง ๋ฌด์„ญ๊ธฐ๋„ ํ–ˆ์ง€๋งŒ ๋‹คํ–‰ํžˆ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.


์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์—ฐ์Šต, https://programmers.co.kr/learn/challenges