Where who wants to meet someone

날짜 비교하기 본문

728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/181838

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 답안 / 다른 사람들의 답안

import Foundation

func solution(_ date1:[Int], _ date2:[Int]) -> Int {
    let a = date1.map { $0 < 10 ? ("0" + String($0)) : String($0) }.joined()
    let b = date2.map { $0 < 10 ? ("0" + String($0)) : String($0) }.joined()
    return a < b ? 1 : 0
}

- 같은 형식이라면 텍스트 자체로 비교할 수 있기 때문에 date1과 date2를 하나의 String으로 변환하여 비교를 수행

- 하지만 1~9월, 1~9일은 한자리이기 때문에 예외 케이스가 발생한다. 이를 방지하기 위해서 10 미만이라면(1자리라면) 앞에 0을 붙여줬다

- 그렇게 만든 a와 b를 비교해서 a가 b보다 작다면(날짜가 앞선다면) 1, 크다면(날짜가 늦다면) 0을 반환하도록 했다

- (하지만 a와 b를 하나의 return문에서 수행하면 type오류가 발생한다)

 

// 풀이 1
import Foundation

func solution(_ date1:[Int], _ date2:[Int]) -> Int {
    let a = date1.map { $0 < 10 ? ("0" + String($0)) : String($0) }.joined()
    let b = date2.map { $0 < 10 ? ("0" + String($0)) : String($0) }.joined()
    return a < b ? 1 : 0
}

// 풀이 2
import Foundation

func solution(_ date1:[Int], _ date2:[Int]) -> Int {
    func calc(_ date: [Int]) -> Int { 
        date[0] * 12 + date[1] * 31 + date[2]
    }
    return calc(date1) < calc(date2) ? 1 : 0
}

// 풀이 3
import Foundation

func solution(_ date1:[Int], _ date2:[Int]) -> Int {
    let firstDate = date1.map { String($0) }.joined()
    let secondDate = date2.map { String($0) }.joined()
    if Int(firstDate)! < Int(secondDate)! { return 1 }
    else { return 0 }
}

 

 

점수: +7