Source Code
import Foundation | |
////#์ด ํฌํจ๋ ์ ์๋ฌธ์๋ก ๊ณ ์น๋ ํจ์ | |
func replaceString(_ melody:String) -> String{ | |
var replaceString = melody | |
//replaceOccurrences๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๋ฌธ์๋ฅผ ๋์ฒดํด์ค๋ค. | |
replaceString = replaceString.replacingOccurrences(of: "C#", with: "c") | |
replaceString = replaceString.replacingOccurrences(of: "D#", with: "d") | |
replaceString = replaceString.replacingOccurrences(of: "F#", with: "f") | |
replaceString = replaceString.replacingOccurrences(of: "G#", with: "g") | |
replaceString = replaceString.replacingOccurrences(of: "A#", with: "a") | |
return replaceString | |
} | |
func solution(_ m:String, _ musicinfos:[String]) -> String { | |
//ํ๋ ์ด ์๊ฐ ์ค ๊ฐ์ฅ ๊ธด ์๊ฐ์ ๋ด์ ๋ณ์ | |
var maxPlayTime = Int() | |
//์ ๋ต์ธ ๋ ธ๋ ์ ๋ชฉ์ ๋ด์ ๋ณ์ | |
var answer = String() | |
//์์ ์ด ๋๋๋ ์๊ฐ์ ์ ์ฅํ ๋ณ์ | |
var musicEnd = Int() | |
//ํ๋ผ๋ฏธํฐ๋ก ๋ค์ด์จ m์ ๋์ฒดํ ๋ณ์ | |
let replaceM = replaceString(m) | |
//for๋ฌธ์ ์ฌ์ฉํด์ ๋ฎค์ง์ธํฌ๋ฅผ ํ์ํด์ค๋ค. | |
for i in 0..<musicinfos.count { | |
//split์ ์ฌ์ฉํ์ฌ , ๋จ์๋ก ๋์ด์ค | |
let music = musicinfos[i].split(separator: ",") | |
/*์์ ์ด ์์ํ๋ ์๊ฐ์ music์์์ 0๋ฒ์จฐ์ด๋ฏ๋ก prefix๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ๋๋ฒ์งธ๋ฅผ ์์๋ด๊ณ ์ด๊ฒ์ ์๊ฐ์ด๋ฏ๋ก * 60์ ํด์ค๋ค | |
๋ํ ๋์์ ๋๋ฒ์งธ๋ ๋ถ์ด๋ฏ๋ก ๋ํด์ค๋ค. | |
*/ | |
let musicStart = Int(music[0].prefix(2))!*60 + Int(music[0].suffix(2))! | |
//๋ง์ฝ 23์ - 00์๊ฐ ๋๋ฉด ๋ฎค์ง ์คํํธ๊ฐ ๋ฎค์ง ์๋๋ณด๋ค ์๊ฐ์ด ๋ ๋ฎ์์ง๋ฏ๋ก ์กฐ๊ฑด๋ฌธ์ ๊ฑธ์ด์ค๋ค. | |
if Int(music[0].prefix(2))! > Int(music[1].prefix(2))! { | |
//๋ฎค์ง์๋๋ ๋ฎค์ง์คํํธ์ ๋ง์ฐฌ๊ฐ์ง๋ก ํด์ค๋ค. ๋ค๋ง ์ด๊ฒ์ 00์๊ฐ ๋๊ฒ์ด๋ฏ๋ก ์์ ์๊ฐ์ 24๋ฅผ ๊ณฑํด์ค๋ค. | |
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 | |
} | |
//music์ 3๋ฒ์งธ ์ธ๋ฑ์ค๋ ๋ฉ๋ก๋๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฒ ๊ณ ๋ก ์ด๊ฒ๋ ์๋ง๊ฒ ๋์ฒดํด์ค๋ค. | |
var replaceMusic = replaceString("\(music[3])") | |
//๋ง์ฝ ํ๋ ์ด ์๊ฐ์ด ๋ฉ๋ก๋๊ฐ ์ ์ฅ๋ ์๊ฐ๋ณด๋ค ๊ธธ๋ค๋ฉด | |
if musicPlayTime > replaceMusic.count { | |
//ํ๋ ์ด ์๊ฐ์ ๋ฉ๋ก๋ ์๊ฐ์ผ๋ก ๋๋์ด์ฃผ๊ณ -1์ ํด์ฃผ๋ฉด ๋ช๋ฒ ๋ ๋ฐ๋ณต๋์๋์ง ์ ์ ์๋ค. | |
let rep = musicPlayTime/replaceMusic.count - 1 | |
//ํ๋ ์ด ์๊ฐ์ ๋ฉ๋ก๋ ์๊ฐ์ผ๋ก ๋๋์ด์ค ๋๋จธ์ง๋ฅผ ๊ตฌํด์ค | |
let left = musicPlayTime%replaceMusic.count | |
//๋ฐ๋ณต๋๋งํผ replaceMusic์ ๋ํด์ค | |
for _ in 0..<rep { | |
replaceMusic += String(replaceString("\(music[3])")) | |
} | |
//๋๋จธ์ง๋งํผ prefix๋ก ์๋ผ์ ๋ง์ ๋ํด์ค๋ค. | |
replaceMusic += replaceMusic.prefix(left) | |
//๋ง์ฝ ํ๋ ์ด ์๊ฐ์ด ๋ฉ๋ก๋๊ฐ ์ ์ฅ๋ ์๊ฐ๋ณด๋ค ์งง๋ค๋ฉด | |
}else{ | |
//๊ทธ๋งํผ ์งค๋ผ์ replaceMusic์ ๋ฐ๊ฟ์ค | |
replaceMusic = String(replaceString("\(music[3])").prefix(musicPlayTime)) | |
} | |
//์ด๋ ๊ฒ ๋ง๋ค์ด์ง replaceMusic์ replaceM์ด ํฌํจ๋์ด ์๋ค๋ฉด | |
if replaceMusic.contains(replaceM) { | |
//์ ๋ต์ ์ ๋ชฉ์ ๋ฐ๊ฟ์ค | |
answer = "\(music[2])" | |
//๊ฐ์ฅ ๊ธด ์๊ฐ ๋ํ ๋ฐ๊ฟ์ค | |
maxPlayTime = musicPlayTime | |
} | |
} | |
//์ ๋ต์ด ๋น์ด์๋ค๋ฉด (None)์ ์๋๋ผ๋ฉด answer๋ฅผ ๋ฐํํด์ค | |
return answer == "" ? "(None)" : answer | |
} | |
solution("ABC", ["00:01,00:08,HI,ABC#ABC"]) |
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 |
๋๊ธ