๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Problem Solution/Programmers

2019 KAKAO BLIND RECRUITMENT ์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ Swift

by Fomagran ๐Ÿ’ป 2020. 9. 24.
728x90
๋ฐ˜์‘ํ˜•
 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ

์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ ์นด์นด์˜คํ†ก ์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ์—์„œ๋Š” ์นœ๊ตฌ๊ฐ€ ์•„๋‹Œ ์‚ฌ๋žŒ๋“ค๊ณผ ๋Œ€ํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ณธ๋ž˜ ๋‹‰๋„ค์ž„์ด ์•„๋‹Œ ๊ฐ€์ƒ์˜ ๋‹‰๋„ค์ž„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฑ„ํŒ…๋ฐฉ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ์‹ ์ž…์‚ฌ์›์ธ ๊น€ํฌ๋ฃจ๋Š” ์นด์นด์˜คํ†ก ์˜ค

programmers.co.kr

Foma's ํ’€์ด

 

๋จผ์ € ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ„ useruid์˜ ์ˆœ์„œ๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด -> var order = [String]()

 

userUID๋ฅผ ์ €์žฅํ•  ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ -> var userUID = [String:String]()

 

๋“ค์–ด์˜จ๊ฑด์ง€ ๋‚˜๊ฐ„๊ฑด์ง€ ์ €์žฅํ•  ๋ฐฐ์—ด -> var EnterOrLeave = [String]()

 

์ •๋‹ต์„ ์ €์žฅํ•  ๋ฐฐ์—ด -> var answer = [String]()

 

record์•ˆ์— ์žˆ๋Š” ๋งŒํผ for๋ฌธ์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ->   for r in record {...}

 

๋„์–ด์“ฐ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ recored์•ˆ์— ์žˆ๋Š” ๊ธ€์”จ๋ฅผ ๋‚˜๋ˆ„์–ด์ค€๋‹ค.(์ด๋ ‡๊ฒŒ ๋‚˜๋ˆ„์–ด์ฃผ๋ฉด 0๋ฒˆ์งธ๋Š” Enter,Leave,Change ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋‹ด๊ธฐ๊ณ  1๋ฒˆ์งธ๋Š” ์œ ์•„์ด๋””๊ฐ€ 2๋ฒˆ์งธ๋Š” ๋‹‰๋„ค์ž„์ด ๋‹ด๊ธฐ๊ฒŒ ๋œ๋‹ค.) -> let sep = r.components(separatedBy: " ")

 

0๋ฒˆ์งธ๊ฐ€ Enter์ผ๊ฒฝ์šฐ EnterOrLeave์— "๋‹˜์ด ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค."๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณค userUID์˜ ํ‚ค๊ฐ’์„ ๋‚˜๋ˆ„์–ด์ค€ ๋ฐฐ์—ด์˜ 1๋ฒˆ์งธ(์œ ์•„์ด๋””)๋กœ ํ•ด์ฃผ๊ณ  ๋‚˜๋ˆ„์–ด์ค€ ๋ฐฐ์—ด์˜ 2๋ฒˆ์งธ(๋‹‰๋„ค์ž„)๋ฅผ ๋ฐธ๋ฅ˜๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณค order์— ์œ ์•„์ด๋””๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. ->

 if sep[0== "Enter" {

            EnterOrLeave.append("๋‹˜์ด ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค.")

           userUID[sep[1]] = sep[2]

            order.append(sep[1])

        }

 

0๋ฒˆ์งธ๊ฐ€ Leave์ผ๊ฒฝ์šฐ EnterOrLeave์— "๋‹˜์ด ๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค."๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ order์— ์œ ์•„์ด๋””๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. -> 

else if sep[0== "Leave"{

             EnterOrLeave.append("๋‹˜์ด ๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค.")

            order.append(sep[1])

        }

 

0๋ฒˆ์งธ๊ฐ€ Change์ผ ๊ฒฝ์šฐ userUID์˜ ํ‚ค๊ฐ’์„ ๋‚˜๋ˆ„์–ด์ค€ ๋ฐฐ์—ด์˜ 1๋ฒˆ์งธ(์œ ์•„์ด๋””)๋ฅผ ํ‚ค๊ฐ’์œผ๋กœ 2๋ฒˆ์งธ๊ฐ’์„ ๋ฐธ๋ฅ˜๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์ค€๋‹ค.

-> else if sep[0== "Change"{

           userUID[sep[1]] = sep[2]

        }

 

order์•ˆ์— ๊ฐ’์œผ๋กœ for๋ฌธ์„ ๋ฐ˜๋ณตํ•˜๊ณ  ์ฐจ๋ก€๋กœ userUID๋”•์…”๋„ˆ๋ฆฌ์—์„œ order์•ˆ์˜ ์œ ์•„์ด๋””๊ฐ’์„ ํ‚ค๊ฐ’์œผ๋กœ ํ•˜๋Š” ๋ฐธ๋ฅ˜๊ฐ’๊ณผ EnterOrLeave์˜ ๊ฐ’์„ ํ•ฉ์ณ์„œ answer๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. ->  

for i in 0..<order.count {

        answer.append("\(userUID[order[i]]!)\(EnterOrLeave[i])")

    }

 

answer๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค. ->  return answer

 

์ „์ฒด์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import Foundation
 
func solution(_ record:[String]) -> [String] {
    
    var order = [String]()
    var userUID = [String:String]()
    var EnterOrLeave = [String]()
    var answer = [String]()
    
    for r in record {
        let sep = r.components(separatedBy: " ")
        if sep[0== "Enter" {
            EnterOrLeave.append("๋‹˜์ด ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค.")
           userUID[sep[1]] = sep[2]
            order.append(sep[1])
        }
        else if sep[0== "Leave"{
             EnterOrLeave.append("๋‹˜์ด ๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค.")
            order.append(sep[1])
        }
        else if sep[0== "Change"{
           userUID[sep[1]] = sep[2]
        }
    }
 
    for i in 0..<order.count {
        answer.append("\(userUID[order[i]]!)\(EnterOrLeave[i])")
    }
   
    return answer
}

 

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€