2021. 5. 27. 19:34γπ§π»π» iOS κ°λ°/Swift - Algorithm - Solutions
π΅π» λ¬Έμ ν΄μ
λ€μ€λ λΌλμ€μμ νλ¬λμ¨ λ Έλμ λ©λ‘λμ μΌλΆλΆμ κΈ°μ΅νκ³ λ°©κΈ κ·Έ 곑μ΄λΌλ μλΉμ€λ₯Ό μ΄μ©νμ¬ ν΄λΉ λ Έλμ μ λͺ©μ μ°ΎμΌλ €κ³ ν©λλ€. μ΄λ λΌλμ€ μ±λμ μ¬μλ λ Έλμ μ λͺ©, μ¬μ μκ°, μ 체 λ©λ‘λ μ 보λ₯Ό μ΄μ©νμ¬ λ¬Έμ λ₯Ό ν΄κ²°ν΄λ³΄λ € ν©λλ€.
μ£Όμ΄μ§λ μ 보μ μΆλ ₯μλ λͺ κ°μ§ κ·μΉμ΄ μ‘΄μ¬ν©λλ€.
- λ€μ€κ° κΈ°μ΅ν λ©λ‘λμ μ 보μ μ¬μ©λλ μμ C, C#, D, D#, E, F, F#, G, G#, A, A#, B 12κ°μ΄λ€.
- κ° μμ 1λΆμ 1κ°μ© μ¬μλλ€. μμ μ λ°λμ μ²μλΆν° μ¬μλλ©° μμ κΈΈμ΄λ³΄λ€ μ¬μλ μκ°μ΄ κΈΈ λλ μμ μ΄ λκΉ μμ΄ μ²μλΆν° λ°λ³΅ν΄μ μ¬μλλ€. μμ κΈΈμ΄λ³΄λ€ μ¬μλ μκ°μ΄ 짧μ λλ μ²μλΆν° μ¬μ μκ°λ§νΌλ§ μ¬μλλ€.
- μμ μ΄ 00:00μ λ겨μκΉμ§ μ¬μλλ μΌμ μλ€.
- μ‘°κ±΄μ΄ μΌμΉνλ μμ μ΄ μ¬λ¬ κ°μΌ λμλ λΌλμ€μμ μ¬μλ μκ°μ΄ μ μΌ κΈ΄ μμ μ λͺ©μ λ°ννλ€. μ¬μλ μκ°λ κ°μ κ²½μ° λ¨Όμ μ λ ₯λ μμ μ λͺ©μ λ°ννλ€.
- μ‘°κ±΄μ΄ μΌμΉνλ μμ μ΄ μμ λμλ “(None)”μ λ°ννλ€.
- mμ μ 1κ° μ΄μ 1439κ° μ΄νλ‘ κ΅¬μ±λμ΄ μλ€.
- musicinfosλ 100κ° μ΄νμ 곑 μ 보λ₯Ό λ΄κ³ μλ λ°°μ΄λ‘, κ°κ°μ 곑 μ 보λ μμ μ΄ μμν μκ°, λλ μκ°, μμ μ λͺ©, μ 보 μ λ³΄κ° ', 'λ‘ κ΅¬λΆλ λ¬Έμμ΄μ΄λ€.
- μμ μ μμ μκ°κ³Ό λλ μκ°μ 24μκ° HH:MM νμμ΄λ€.
- μμ μ λͺ©μ ', ' μ΄μΈμ μΆλ ₯ κ°λ₯ν λ¬Έμλ‘ ννλ κΈΈμ΄ 1 μ΄μ 64 μ΄νμ λ¬Έμμ΄μ΄λ€.
- μ 보 μ 보λ μ 1κ° μ΄μ 1439κ° μ΄νλ‘ κ΅¬μ±λμ΄ μλ€.
μ λ λ¨Όμ μ£Όμ΄μ§ μμ μ λ©λ‘λλ₯Ό μ¬μμκ°μ λ§κ² λ λ°λ³΅ μ¬μν λ¬Έμμ΄μ ꡬνκ³ κ·Έ λ¬Έμμ΄μ΄ λ€μ€κ° κΈ°μ΅ν λ©λ‘λ λ¬Έμμ΄μ ν¬ν¨νκ³ μμΌλ©΄ μ λ΅μ 리ν΄νλ λ°©μμΌλ‘ μ κ·Όνμ΅λλ€.
κ·Έ κ³Όμ μμ λͺ κ°μ§ λ¬Έμ κ° μμλλ°, κ·Έμ€μ νλκ° Cμ C#λ₯Ό ꡬλΆν΄μ£Όμ΄μΌ νλ€λ μ μ΄μμ΅λλ€. λ¨μν contains λ©μλλ₯Ό μ¬μ©νλ©΄ κΈ°μ΅νλ λ©λ‘λκ° "ABC"μ΄κ³ μ¬μλ λ Έλλ€μ΄ "ABC", "ABC#" μΌ λ λ λ Έλ λͺ¨λ 맀μΉμ΄ λμ΄ μ νν λ΅μ ꡬν μ μκΈ° λλ¬Έμ΄μμ΅λλ€.
μ΄λ₯Ό ν΄κ²°ν΄μ£ΌκΈ° μν΄ C#μ μλ¬Έμ cλ‘ λ³νν΄μ£Όμ΄ ꡬλΆμ΄ λλλ‘ ν΄κ²°νμ΅λλ€. κ·Έ ν 맀μΉμ΄ λλ λ Έλλ€μ λ°°μ΄μ λ΄μμ μ¬μμκ°, μ λ ₯ μμμ λ°λΌ μ λ ¬μ ν΄μ€ λ€ μ λ΅μ ꡬν΄λ³΄μμ΅λλ€.
π¦ λ¬Έμ νμ΄ & μ½λ
import Foundation
struct MusicInfo {
let title: String
let playtime: Int
let score: String
var playedMelody: String {
let start = score.startIndex
// μ¬μμκ°μ΄ ν΄λΉκ³‘μ λ©λ‘λ λ³΄λ€ μ§§μ κ²½μ°
if playtime < score.count {
return String(score[start...score.index(start, offsetBy: playtime)])
}
// κ·Έλ μ§ μμ κ²½μ° λλ¨Έμ§ μ°μ°μ ν΅ν΄ μ¬μμκ°μ λ§μΆ° μ¬μλ λ©λ‘λ λ¬Έμμ΄μ λ°ν
return [String](repeating: score, count: playtime / score.count).joined()
+ String(score[start...score.index(start, offsetBy: playtime % score.count)])
}
init(_ title: String, _ playtime: Int, _ score: String) {
self.title = title
self.playtime = playtime
self.score = score
}
}
func solution(_ m:String, _ musicinfos:[String]) -> String {
// 맀μΉλ μμ
리μ€νΈλ₯Ό μ μ₯ν λ°°μ΄
var matchedMusicList: [(title: String, playtime: Int)] = []
let formatter = DateFormatter()
formatter.dateFormat = "HH:mm"
// DateFormatterλ₯Ό μ΄μ©νμ¬ μ¬μμκ°μ λΆ λ¨μλ‘ κ΅¬νλ ν¨μ
func calculatePlaytime(_ start: String, _ end: String) -> Int {
let startDate = formatter.date(from: start)!
let endDate = formatter.date(from: end)!
return Int(endDate.timeIntervalSince(startDate) / 60)
}
// μ
λ ₯λ λ©λ‘λ λ¬Έμμ΄μ #λ
ΈνΈλ€μ μλ¬Έμλ‘ λ³ννλ ν¨μ
func convertSharpToLowcase(_ score: String) -> String {
var convertedScore = score
let notes = [("C#","c"), ("A#","a"), ("D#","d"), ("F#","f"), ("G#","g")]
for note in notes {
convertedScore = convertedScore.replacingOccurrences(of: note.0, with: note.1)
}
return convertedScore
}
for musicinfo in musicinfos {
let components = musicinfo.components(separatedBy: ",")
let convertedScore = convertSharpToLowcase(components[3])
let music = MusicInfo(components[2], calculatePlaytime(components[0], components[1]), convertedScore)
// 맀μΉλ μμ
μ 리μ€νΈμ μ μ₯
if music.playedMelody.contains(convertSharpToLowcase(m)) {
matchedMusicList.append((music.title, music.playtime))
}
}
// 맀μΉλ μμ
μ΄ μμ κ²½μ° "(None)" 리ν΄
if matchedMusicList.isEmpty {
return "(None)"
}
// μ¬μ μκ°, μ
λ ₯μμμ λ§μΆ° λ°°μ΄μ μ λ ¬, μ¬μμκ°μ΄ κΈ΄ μμ
μ΄ μμ μ€λλ‘ μ λ ¬
let sorted = matchedMusicList.enumerated().sorted {
if $0.element.playtime == $1.element.playtime {
return $0.offset < $1.offset
}
return $0.element.playtime > $1.element.playtime
}
// λ°°μ΄μ 첫 λ²μ§Έ μμκ° μ λ΅
return sorted.first!.element.title
}
'π§π»βπ» iOS κ°λ° > Swift - Algorithm - Solutions' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift - νλ‘κ·Έλλ¨Έμ€] μ κ· μμ΄λ μΆμ² (0) | 2021.05.31 |
---|---|
[Swift - νλ‘κ·Έλλ¨Έμ€] μμ κ²μ (0) | 2021.05.29 |
[Swift - νλ‘κ·Έλλ¨Έμ€] [3μ°¨] nμ§μ κ²μ (0) | 2021.05.27 |
[Swift - νλ‘κ·Έλλ¨Έμ€] [3μ°¨] νμΌλͺ μ λ ¬ (0) | 2021.05.25 |
[Swift - νλ‘κ·Έλλ¨Έμ€] κ°μ₯ ν° μ μ¬κ°ν μ°ΎκΈ° (0) | 2021.05.22 |