From c417d57748f91c22889f30c0287935df20736709 Mon Sep 17 00:00:00 2001 From: MinwooJe <59834326+MinwooJe@users.noreply.github.com> Date: Wed, 4 Feb 2026 02:08:48 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B0=90=EC=82=AC=ED=95=B4=EC=9A=94=EB=A0=88?= =?UTF-8?q?=EC=9D=B4=EB=B8=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JSON.swift\342\200\216" | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 "WEEK03/\355\224\204\353\241\234\352\267\270\353\236\230\353\250\270\354\212\244_[3\354\260\250] \353\260\251\352\270\210\352\267\270\352\263\241/JSON.swift\342\200\216" diff --git "a/WEEK03/\355\224\204\353\241\234\352\267\270\353\236\230\353\250\270\354\212\244_[3\354\260\250] \353\260\251\352\270\210\352\267\270\352\263\241/JSON.swift\342\200\216" "b/WEEK03/\355\224\204\353\241\234\352\267\270\353\236\230\353\250\270\354\212\244_[3\354\260\250] \353\260\251\352\270\210\352\267\270\352\263\241/JSON.swift\342\200\216" new file mode 100644 index 0000000..e709aeb --- /dev/null +++ "b/WEEK03/\355\224\204\353\241\234\352\267\270\353\236\230\353\250\270\354\212\244_[3\354\260\250] \353\260\251\352\270\210\352\267\270\352\263\241/JSON.swift\342\200\216" @@ -0,0 +1,51 @@ +func solution(_ m:String, _ musicinfos:[String]) -> String { + var matched: (String, Int) = ("(None)", 0) // 음악 제목 - 재생된 시간 + let m = parseMusic(m) + + + for info in musicinfos { + let (playTime, name, music) = parseMusicInfo(info) + + let paddedMusic = String(repeating: music, count: playTime / music.count) + + music.prefix(playTime % (music.count)) + + if paddedMusic.contains(m) { + if matched.1 < playTime { + matched = (name, playTime) + } + } + } + + return matched.0 +} + +func parseMusicInfo(_ info: String) -> (Int, String, String) { + let info = info.components(separatedBy: ",") + let playTime = toMinute(info[1]) - toMinute(info[0]) + let name = info[2] + let music = parseMusic(info[3]) + + return (playTime, name, music) +} + +func toMinute(_ time: String) -> Int { + let time = time.components(separatedBy: ":").compactMap { Int($0) } + if let hour = time.first, + let minute = time.last { + return hour * 60 + minute + } + return 0 +} + +func parseMusic(_ music: String) -> String { + var result = [Character]() + for m in music { + if m == "#", let last = result.last { + result[result.count - 1] = Character(last.lowercased()) + continue + } + result.append(m) + } + + return String(result) +}