λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“– Problem Solution

[Swift] 2021 KAKAO BLIND RECRUITMENT κ΄‘κ³  μ‚½μž…

by Fomagran πŸ’» 2021. 4. 11.
728x90
λ°˜μ‘ν˜•

Problem

 

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - κ΄‘κ³  μ‚½μž…

μ‹œκ°„μ„ λ‚˜νƒ€λ‚΄λŠ” HH, H1, H2의 λ²”μœ„λŠ” 00~99, 뢄을 λ‚˜νƒ€λ‚΄λŠ” MM, M1, M2의 λ²”μœ„λŠ” 00~59, 초λ₯Ό λ‚˜νƒ€λ‚΄λŠ” SS, S1, S2의 λ²”μœ„λŠ” 00~59κΉŒμ§€ μ‚¬μš©λ©λ‹ˆλ‹€. 잘λͺ»λœ μ‹œκ°μ€ μž…λ ₯으둜 주어지지 μ•ŠμŠ΅λ‹ˆλ‹€. (예: 04:60:24, 11

programmers.co.kr


Solution

 

핡심

 

1. λͺ¨λ“  μ‹œκ°„μ„ 초둜 ν™˜μ‚°ν•˜κΈ°

 

총 μž¬μƒμ‹œκ°„, κ΄‘κ³  μ‹œκ°„, μ‹œμ²­μžλ“€μ΄ μž¬μƒμ„ μ‹œμž‘ν•œ μ‹œκ°„, μ‹œμ²­μžλ“€μ΄ μž¬μƒμ„ 끝낸 μ‹œκ°„μ„ λͺ¨λ‘ 초둜 ν™˜μ‚°ν•©λ‹ˆλ‹€.

 

ex) 총 μž¬μƒμ‹œκ°„μ΄ 1μ‹œκ°„ 11λΆ„ 11초 이라면 -> 60λΆ„ 11λΆ„ 11초 -> 3600초 + 660초 + 11초 = 4271초

 

(μ•„λž˜ Source Codeμ—μ„œ makeSeconds ν•¨μˆ˜λ₯Ό μ°Έκ³ ν•΄μ£Όμ„Έμš”.)

 

2.총 ν”Œλ ˆμ΄ μ‹œκ°„μ„ 초둜 ν™˜μ‚°ν•œ κ°―μˆ˜μ— +1λ§ŒνΌμ„ 0을 넣은 κ°’μœΌλ‘œ λ°°μ—΄ λ§Œλ“€κΈ°(μ΅œλŒ€ 360001개) 

 

ex) 총 μž¬μƒμ‹œκ°„μ΄ 1μ‹œκ°„ 11λΆ„ 11초 이라면 4271μ΄ˆμ΄λ―€λ‘œ [0,0,0,0,0.....] 4272개 길이의 배열을 λ§Œλ“€μ–΄μ€Œ.

 

(μ•„λž˜ Source Codeμ—μ„œ allPlaySeconds λ³€μˆ˜λ₯Ό μ°Έκ³ ν•΄μ£Όμ„Έμš”.)

 

3.λ‘œκ·Έμ•ˆμ— μžˆλŠ” μ‹œμž‘κ³Ό 끝을 μœ„μ—μ„œ λ§Œλ“  배열에 ν‘œμ‹œν•΄μ£ΌκΈ°

 

μ‹œμž‘ν•˜λŠ” 숫자의 μΈλ±μŠ€μ— +1을 ν•΄μ£Όκ³  λλ‚˜λŠ” 숫자의 μΈλ±μŠ€μ— -1을 ν•΄μ€λ‹ˆλ‹€.

 

ex) μ‹œμ²­μžκ°€ 2μ΄ˆλΆ€ν„° 5μ΄ˆκΉŒμ§€ λ΄€λ‹€λ©΄ 2λ²ˆμ§Έμ™€ 5번째 인덱슀 -> [0,0,1,0,0,-1]

 

(μ•„λž˜ Source Codeμ—μ„œ for log in logsλ₯Ό μ°Έκ³ ν•΄μ£Όμ„Έμš”.)

 

4. 총 ν”Œλ ˆμ΄ μ‹œκ°„ 배열에 μ‹œμ²­μžλ“€μ˜ 수 μ •ν•˜κΈ°

 

ν˜„μž¬ 인덱슀λ₯Ό ν˜„μž¬ 인덱슀 μˆ«μžμ™€ ν˜„μž¬ 인덱슀 -1의 숫자λ₯Ό λ”ν•΄μ€λ‹ˆλ‹€.

 

μ΄λ ‡κ²Œ ν•˜λ©΄ λͺ¨λ“  μ‹œμ²­μžλ“€μ˜ μ‹œμž‘κ³Ό 끝은 각각 +1 -1이 λ˜μ–΄μžˆμœΌλ―€λ‘œ κ·Έ 사이에 μžˆλŠ” 값은

 

λˆ„μ λœ κ°’μœΌλ‘œ λ©λ‹ˆλ‹€.

 

ex) 예λ₯Ό λ“€λ©΄ μ‹œμ²­μž Aκ°€ 2μ΄ˆλΆ€ν„° 10μ΄ˆκΉŒμ§€ μž¬μƒν–ˆκ³  Bκ°€ 3μ΄ˆλΆ€ν„° 7μ΄ˆκΉŒμ§€ μž¬μƒν–ˆλ‹€λ©΄

 

A = [0,0,1,0,0,0,0,0,0,0,-1] B = [0,0,0,1,0,0,0,-1]

 

λ‘˜μ„ ν•©μΉ˜λ©΄ [0,0,1,1,0,0,0-1,0,0,-1] κ³Ό 같이 될 κ²ƒμž…λ‹ˆλ‹€.

 

그리고 이것을 μœ„μ™€ 같이 ν˜„μž¬ 인덱슀 μˆ«μžμ™€ κ·Έ μ „ 숫자λ₯Ό 합쳐주면

 

[0,0,1,2,2,2,2,1,1,1,0] 와 같이 될 κ²ƒμž…λ‹ˆλ‹€.

 

그러면 μ •ν™•νžˆ A와 Bκ°€ 겹친 μ‹œκ°„μ€ 3초 ~7초 즉 4μ΄ˆμ΄λ―€λ‘œ 3,4,5,6 μΈλ±μŠ€κ°€ 2둜 λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€.

 

(μ•„λž˜ Source Codeμ—μ„œ for i in 1...playTimeSeconds μ„ μ°Έκ³ ν•΄μ£Όμ„Έμš”.)

 

5.0μ΄ˆλΆ€ν„° κ΄‘κ³ μ‹œκ°„κΉŒμ§€ 총 ν”Œλ ˆμ΄ μ‹œκ°„ λ°°μ—΄μ—μ„œ ν•© ꡬ해주기

 

0μ΄ˆλΆ€ν„° κ΄‘κ³ λ₯Ό μ‹œμž‘ν–ˆμ„ κ²½μš°κ°€ κ°€μž₯ μ΅œμ†Œ μ‹œμž‘μ΄λ―€λ‘œ 0μ΄ˆλΆ€ν„° κ΄‘κ³ μ‹œκ°„κΉŒμ§€μ˜ 합을 ꡬ해 μ΅œμ†Œμ‹œμž‘μ˜ 합을 λ§Œλ“€μ–΄μ€λ‹ˆλ‹€.

 

(μ•„λž˜ Source Codeμ—μ„œ sum λ³€μˆ˜λ₯Ό μ°Έκ³ ν•΄μ£Όμ„Έμš”.)

 

5.κ΄‘κ³ μ‹œκ°„λΆ€ν„° 총 ν”Œλ ˆμ΄μ‹œκ°„κΉŒμ§€ 1μ΄ˆμ”© 움직이며 κ°€μž₯ μ΅œλŒ€μ˜ ν•© ꡬ해주기

 

0μ΄ˆλΆ€ν„° κ΄‘κ³ μ‹œκ°„κΉŒμ§€ , 1μ΄ˆλΆ€ν„° κ΄‘κ³ μ‹œκ°„+1κΉŒμ§€,2μ΄ˆλΆ€ν„° κ΄‘κ³ μ‹œκ°„ +2κΉŒμ§€....μ΄λ ‡κ²Œ ν”Œλ ˆμ΄μ‹œκ°„κΉŒμ§€μ˜ 합을 κ΅¬ν•΄λ‚˜κ°€λ‹€ 보면

 

κ°€μž₯ 합이 높은 ꡬ간을 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

 

νš¨μœ¨μ„±μ„ μœ„ν•΄μ„  λͺ¨λ“  합을 ꡬ할 ν•„μš”μ—†μ΄ κ΅¬ν•΄μ ΈμžˆλŠ” ν•©μ—μ„œ κ°€μž₯ 첫번째λ₯Ό λΉΌμ£Όκ³  κ°€μž₯ λ§ˆμ§€λ§‰μ˜ + 1번째 값을 λ”ν•΄μ£ΌκΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.

 

ex) 0μ΄ˆλΆ€ν„° 10μ΄ˆκΉŒμ§€λΌλ©΄ κ·Έ λ‹€μŒ ꡬ간은 1μ΄ˆλΆ€ν„° 11μ΄ˆμ΄λ―€λ‘œ 0초λ₯Ό λΉΌμ£Όκ³  11초λ₯Ό 더해주면 κ·Έ λ‹€μŒλ²ˆμ§Έ 합이 λ©λ‹ˆλ‹€.

 

(μ•„λž˜ Source Codeμ—μ„œ for i in advTimeSeconds..<playTimeSecondsλ₯Ό μ°Έκ³ ν•΄μ£Όμ„Έμš”.)

 

μ£Όμ˜ν•  점

 

μ΅œλŒ€ 30만 μ‹œμ²­μžκ°€ μ΅œλŒ€ 100μ‹œκ°„κΉŒμ§€ λͺ¨λ‘ λ³Ό 수 μžˆμœΌλ―€λ‘œ 초둜 κ³„μ‚°ν•˜λ©΄ 36만 * 30만 = 1080얡이 μ΅œλŒ€κ°€ λ©λ‹ˆλ‹€.

 

Intν˜•,Floatν˜• λŒ€μ‹  Double을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.


Source Code

 

 

 


P.S

 

μ²˜μŒμ— λͺ¨λ“  λˆ„μ  숫자λ₯Ό κ΅¬ν•˜λ €κ³  ν• λ•Œ 둜그λ₯Ό μ•„λž˜μ™€ 같이 κ΅¬ν–ˆλ”λ‹ˆ ν•œ 8개 ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€μ—μ„œ μ‹œκ°„ μ΄ˆκ³Όκ°€ 났닀.

 

카카였 λΈ”λ‘œκ·Έμ—μ„œ 문제 풀이λ₯Ό 보고 μ‹œμž‘κ³Ό 끝에 +1을 ν•΄μ£Όκ³  -1을 ν•΄μ€€ λ’€ ν˜„μž¬μ™€ κ·Έ μ „ 숫자λ₯Ό 더해주면

 

각 μ΄ˆμ— μ‹œμ²­μžλ“€μ˜ 수λ₯Ό μ‰½κ²Œ ꡬ할 수 μžˆμ—ˆλ‹€. 

 

    for log in logs {

        let startEnd = splitPlaytime(playtime: log)
        let start = makeSeconds(time: startEnd.0)
        let end = makeSeconds(time: startEnd.1)

        for i in start..<end {
            allPlaySeconds[i] += 1
        }

    }

Reference

 

 

2021 카카였 μ‹ μž…κ³΅μ±„ 1μ°¨ 온라인 μ½”λ”© ν…ŒμŠ€νŠΈ for Tech developers λ¬Έμ œν•΄μ„€

μ§€λ‚œ 2020λ…„ 9μ›” 12일 ν† μš”μΌ μ˜€ν›„ 2μ‹œλΆ€ν„° 7μ‹œκΉŒμ§€ 5μ‹œκ°„ λ™μ•ˆ 2021 카카였 μ‹ μž… 개발자 곡채 1μ°¨ μ½”λ”© ν…ŒμŠ€νŠΈκ°€ μ§„ν–‰λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν…ŒμŠ€νŠΈμ—λŠ” 총 7개의 λ¬Έμ œκ°€ μΆœμ œλ˜μ—ˆμœΌλ©°, 개발 μ–Έμ–΄λŠ” C++, Java, Jav

tech.kakao.com

728x90
λ°˜μ‘ν˜•

λŒ“κΈ€