Source Code
Solution
ํต์ฌ
#์ด ๋ค์ด๊ฐ ๋ฌธ์๋ฅผ replaceOccurrences๋ฅผ ์ฌ์ฉํ์ฌ ๋์ฒดํด์ค ๊ฒ
23์์์ 00์๋ก ๋ณํ ๋์ ์ ๋ง๊ฒ ํด์ค ๊ฒ
ํ๋ ์ด๋ ์๊ฐ๋งํผ ๋ฉ๋ก๋๋ฅผ ๋ฐ๋ณตํด์ฃผ๊ณ prefix๋ฅผ ์ด์ฉํด ์๋ผ์ค ๊ฒ
Problem
์ฝ๋ฉํ ์คํธ ์ฐ์ต - [3์ฐจ] ๋ฐฉ๊ธ๊ทธ๊ณก
๋ฐฉ๊ธ๊ทธ๊ณก ๋ผ๋์ค๋ฅผ ์์ฃผ ๋ฃ๋ ๋ค์ค๋ ๋ผ๋์ค์์ ๋ฐฉ๊ธ ๋์๋ ์์ ์ด ๋ฌด์จ ์์ ์ธ์ง ๊ถ๊ธํด์ง ๋๊ฐ ๋ง๋ค. ๊ทธ๋ด ๋ ๋ค์ค๋ ๋ค์ ํฌํธ์ '๋ฐฉ๊ธ๊ทธ๊ณก' ์๋น์ค๋ฅผ ์ด์ฉํ๊ณค ํ๋ค. ๋ฐฉ๊ธ๊ทธ๊ณก์์๋ TV,
programmers.co.kr
30๋ฒ ํ๋๋ง ํ๋ ธ๋ ํ์ด
์๋๋ฅผ ๋ณด๋ฉด replaceOccurrences๋ฅผ ๋ชฐ๋๋ ์ํ์์ ํ์๋ ๊ฒ์ด๋ค.
์ด๊ฒ์ ๊ฒฐ๊ตญ m์ ๋ง์ง๋ง ๋ฌธ์๊ฐ #์ด ํฌํจ๋ ๋ฌธ์์ธ์ง ์๋์ง๋ง ์๋ฉด ๋๋๊ฑฐ ์๋์ผ? ๋ผ๋ ์๊ฐ์ผ๋ก
m์ ๋ง์ง๋ง ๋ฌธ์์ธ ๊ฒ๋ง ๋ณํํด์ ํ์ด์ฃผ๋ ค๊ณ ํ๋๋ฐ ๊ณ์ 30๋ฒ์ด ํ๋ฆฌ๋ ๊ฒ์ด๋ค.
์ด๊ฒ์ ํ๋ ์ด๋ ์๊ฐ์ ์๋ณด๋ค m์ ๊ธธ์ด๊ฐ ๋ ๊ธธ ๊ฒฝ์ฐ๋ฅผ ์บ์นํ๊ธฐ๊ฐ ํ๋ค๋ค.
ex) m = "CBA#D#F#C" , melody = "CBA#D#F#" ์ผ ๊ฒฝ์ฐ ๊ธธ์ด๋ฅผ ์ฌ๊ธฐ๊ฐ ํ๋ค์ด์ง.
์ด๋ป๊ฒ๋ ํ๋ฉด ํ์์๊ฑฐ ๊ฐ์๋ฐ ํจ์จ์ ์ด์ง ์๋ค๊ณ ํ๋จํ๋ค.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
import Foundation
func solution(_ m:String, _ musicinfos:[String]) -> String {
var maxPlayTime = Int()
var answer = String()
var musicEnd = Int()
for i in 0..<musicinfos.count {
let music = musicinfos[i].split(separator: ",")
let musicStart = Int(music[0].prefix(2))!*60 + Int(music[0].suffix(2))!
if Int(music[0].prefix(2))! > Int(music[1].prefix(2))! {
musicEnd = (Int(music[1].prefix(2))!+24)*60 + Int(music[1].suffix(2))!
}else{
musicEnd = Int(music[1].prefix(2))!*60 + Int(music[1].suffix(2))!
}
let musicPlayTime = musicEnd - musicStart
if maxPlayTime >= musicPlayTime {
continue
}
var melody = music[3]
if music[3].count < m.count {
let rep = m.count/music[3].count
for _ in 0...rep {
melody += music[3]
}
}else{
melody += music[3]
}
var melodyMap = melody.map{String($0)}
var mMap = m.map{String($0)}
for i in 1..<melodyMap.count {
if melodyMap[i] == "#" && melodyMap[i-1] == String(m.last!){
melodyMap[i-1] = "Z"
}
}
for i in 1..<mMap.count {
if mMap[i] == "#" && mMap[i-1] == String(m.last!){
mMap[i-1] = "Z"
}
}
if music[3].count == m.count && m.first! == "#" {
mMap.removeLast()
mMap.append("Z")
}
if melodyMap.joined().contains(mMap.joined()) {
answer = "\(music[2])"
maxPlayTime = musicPlayTime
}
}
return answer == "" ? "(None)" : answer
}
|
์๋กญ๊ฒ ์๊ฒ ๋ ๊ฒ
'๐ Problem Solution > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2019 KAKAO BLIND RECRUITMENT ํ๋ณดํค Swift (0) | 2020.12.04 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค ์๊ฐ ์ฝ๋ ์ฑ๋ฆฐ์ง ์์ฆ1 ์ผ๊ฐ ๋ฌํฝ์ด Swift (0) | 2020.12.01 |
2018 KAKAO BLIND RECRUITMENT [3์ฐจ] ํ์ผ๋ช ์ ๋ ฌ Swift (0) | 2020.11.19 |
2018 KAKAO BLIND RECRUITMENT [3์ฐจ] ์์ถ Swift (0) | 2020.11.16 |
ํ๋ก๊ทธ๋๋จธ์ค ์๊ฐ ์ฝ๋ ์ฑ๋ฆฐ์ง ์์ฆ1 ์ด์ง ๋ณํ Swift (0) | 2020.11.15 |
๋๊ธ