개발하는 동글 :]

[프로그래머스],[[3차]_방금그곡],[Swift] 본문

카테고리 없음

[프로그래머스],[[3차]_방금그곡],[Swift]

동글하다 2023. 6. 18. 19:58

풀이

1. 재생된 시간만큼 문자열을 만들기 위해 C# 같은 문자를 1로 변환한 후 시간만큼의 길이를 가진 문자열을 만들어 같은 방식으로 변환한 target이 포함되어 있는지 확인

2. 포함되어 있을 때 기존의 resultTime과 현재의 time을 비교하여 더 클 시 result와 resultTime을 변경

코드

func solution(_ m:String, _ musicinfos:[String]) -> String {
    
    var target = m.replacingOccurrences(of: "C#", with: "1").replacingOccurrences(of: "D#", with: "2")
                  .replacingOccurrences(of: "F#", with: "3").replacingOccurrences(of: "G#", with: "4")
                  .replacingOccurrences(of: "A#", with: "5")
    var result = ""
    var resultTime = 0
    
    for i in musicinfos{
        var data = i.components(separatedBy:",")
        var t1 = data[0].components(separatedBy:":").map{Int($0)!}
        var t2 = data[1].components(separatedBy:":").map{Int($0)!}
        var time = ((t2[0] * 60) + t2[1]) - ((t1[0] * 60) + t1[1])
        var musicName = data[2]
        var musicData = data[3].replacingOccurrences(of: "C#", with: "1").replacingOccurrences(of: "D#", with: "2")
                           .replacingOccurrences(of: "F#", with: "3").replacingOccurrences(of: "G#", with: "4")
                           .replacingOccurrences(of: "A#", with: "5")
        var music = ""
        while music.count != time{
            for i in musicData{
                if music.count < time{
                    music += String(i)
                } else {
                    break
                }
            }
        }
        if music.contains(target){
            if resultTime < time{
                result = musicName
                resultTime = time
            }
        }
    }
    
    return result == "" ? "(None)" : result
}