문제 설명
문제: 타임머신
당신은 타임머신을 조종할 수 있는 엔지니어입니다. 하지만 타임머신이 고장 나서 회수된 시간의 리스트가 주어졌습니다. 당신의 임무는 이 리스트를 기반으로 주어진 시간의 간격 내에서 가장 짧은 시간의 차를 출력하는 것입니다.
입력으로는 N개의 시간정보가 주어집니다. 각 시간정보는 HH:MM 형태로 주어지며, 이 시간을 정수로 변환하여 두 시간 간의 차를 계산해야 합니다. 이때, 차이는 항상 양수로 가정합니다.
입력 예시: [“12:30”, “14:15”, “09:00”, “16:45”]
결과는 두 시간 간의 최소 차이를 분 단위로 출력합니다.
문제 해결 과정
1. 문제 분석
시간 쌍이 주어질 때, 그 간격을 비교하여 가장 작은 값을 찾아야 합니다. 시간 간격을 계산하는 방법으로는 시간이 소모된 분으로 변환한 후, 두 시간 간의 절대 차이를 구하는 방식이 있습니다.
2. 알고리즘 설계
우선, 주어진 시간 리스트를 시간 값으로 변환하여 분 단위로 저장합니다. 다음으로는 모든 시간 쌍을 비교하여 가장 짧은 시간 간격을 찾아내는 방식을 사용할 수 있습니다. 이 과정은 다음의 단계로 나뉘어 진행됩니다:
- 시간 문자열을 시간으로 변환
- 모든 시간 조합을 비교하며 그 차이를 저장
- 최소 차이를 출력
3. 구현
import Foundation
func timeToMinutes(time: String) -> Int {
let components = time.split(separator: ":").map { Int($0)! }
return components[0] * 60 + components[1]
}
func minTimeDifference(times: [String]) -> Int {
var minutesList = times.map { timeToMinutes(time: $0) }.sorted()
var minDiff = Int.max
for i in 0..
4. 결과 및 해석
위 코드를 실행하면 주어진 시간 리스트 내의 최소 시간 간격이 계산됩니다. 설명한 알고리즘을 활용하여, 타임머신 문제를 효과적으로 해결할 수 있었습니다.
결론
이번 강좌에서는 스위프트를 활용하여 시간 간격을 계산하는 알고리즘 문제를 다루었습니다. 기본적인 시간 변환 로직과 시간 비교의 중요성을 이해하고, 실제 문제 해결을 위한 코드 구현을 살펴보았습니다. 앞으로도 다양한 알고리즘 문제를 스위프트로 해결해 나가길 바랍니다.