[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/알고리즘 연습

[알고리즘 연습] 방금그곡 (프로그래머스 lv2, 스위프트)

inu 2022. 4. 23. 01:12
반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/17683

 

코딩테스트 연습 - [3차] 방금그곡

방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV,

programmers.co.kr

풀이

func solution(_ m:String, _ musicinfos:[String]) -> String {    
    func change(_ melody: String) -> String {
        var melody = melody
        melody = melody.replacingOccurrences(of: "A#", with: "a")
        melody = melody.replacingOccurrences(of: "C#", with: "c")
        melody = melody.replacingOccurrences(of: "D#", with: "d")
        melody = melody.replacingOccurrences(of: "F#", with: "f")
        melody = melody.replacingOccurrences(of: "G#", with: "g")
        return melody
    }

    var neo = Array(m)
    var answer = "(None)"
    var answerTime = 0

    for mi in musicinfos {
        var musicinfo = mi.components(separatedBy: ",")
        var st = musicinfo[0].components(separatedBy: ":")
        var et = musicinfo[1].components(separatedBy: ":")
        var sh = Int(st[0])!
        var sm = Int(st[1])!
        var eh = Int(et[0])!
        var em = Int(et[1])!
        var music = change(musicinfo[3]).map {
            String($0)
        }
        var time = eh*60 + em - sh*60 - sm
        var idx = 0
        var line = ""

        for _ in 0..<time {
            line += music[idx]
            idx = (idx + 1) % music.count
        }

        if line.contains(change(m)) && answerTime < time {
            answer = musicinfo[2]
            answerTime = time
        }
    }

    return answer
}
  • change 함수처럼 # 음표를 처리하여 접근할 생각을 못해서 조금 애를 먹은 문제입니다.
  • 그렇게 처리하고나면 비교적 단순하게 처리가 가능합니다.
반응형