트랙
/
Swift
Swift
/
연습 문제
/
골치 아픈 차량 구매
골치 아픈 차량 구매

골치 아픈 차량 구매

학습 연습 문제

소개

비교 연산자

비교 연산자는 같은 타입의 두 값을 비교하고 Bool 값(true 또는 false)을 반환해요. 서로 다른 타입의 값을 비교하려고 하면 컴파일러가 오류를 발생시켜요.

Swift의 표준 비교 연산자는 다음과 같아요:

연산자 설명 예시
== 같음 1 == 1 (true)
!= 같지 않음 1 != 2 (true)
< 보다 작음 4 < 5 (true)
<= 보다 작거나 같음 4 <= 4 (true)
> 보다 큼 3 > 1 (true)
>= 보다 크거나 같음 2 >= 2 (true)

if문과 else문

조건문은 조건이 true로 평가되는지 false로 평가되는지에 따라 코드를 실행해요. 가장 흔한 조건문은 if문으로, 조건이 true일 때만 코드 블록을 실행해요. if문은 if 키워드로 시작하고, 그 뒤에 조건과 중괄호로 감싼 코드 블록을 써요:

let wheelCount = 4
if wheelCount == 4 {
    print("Your vehicle is a car")
}
// Prints "Your vehicle is a car"

if에 else 절을 붙이면 조건이 false일 때 다른 코드를 실행할 수 있어요:

let precipitationInMM = 0.5
if precipitationInMM > 0.5 {
    print("You will need an umbrella")
} else {
    print("You will not need an umbrella")
}
// Prints "You will not need an umbrella"

여러 조건을 차례로 검사하려면 else if로 문을 이어 붙여요. if문에는 else 분기가 꼭 필요하지는 않지만, 어떤 조건에도 맞지 않는 경우를 처리하려면 넣을 수 있어요:

let favoriteFruit = "Apple"

if favoriteFruit == "Banana" {
    print("Your favorite fruit is a banana")
} else if favoriteFruit == "Orange" {
    print("Your favorite fruit is an orange")
} else if favoriteFruit == "Apple" {
    print("Your favorite fruit is an apple")
} else {
    print("Your favorite fruit is not a banana, orange, or apple")
}
// Prints "Your favorite fruit is an apple"

if 표현식

최신 Swift에서는 if문을 값을 만들어 내는 표현식으로도 사용할 수 있어요. 각 분기가 값으로 평가되기 때문에 조건에 따라 결과를 쉽게 대입할 수 있어요:

let cpuBits = 32
let architecture = if cpuBits == 64 {
    "x86_64"
} else {
    "x86_32"
}

print(architecture)
// Prints "x86_32"

삼항 연산자

삼항 조건 연산자는 if-else 표현식을 간결하게 줄여 쓴 형태예요. 조건을 평가하고, 그 조건이 true인지 false인지에 따라 두 값 중 하나를 반환해요.

이 연산자는 condition ? trueExpression : falseExpression처럼 세 부분으로 이루어져 있어요. condition이 true로 평가되면 trueExpression이 평가되어 반환되고, 그렇지 않으면 falseExpression이 평가되어 반환돼요.

삼항 연산자는 간단한 한 줄짜리 선택에 딱 맞아요:

let showFahrenheit = true
let temperatureInCelsius = 30

let temperature = showFahrenheit ? temperatureInCelsius * 9 / 5 + 32 : temperatureInCelsius
print(temperature)
// Prints 86

위 예시는 다음 코드를 간결하게 표현한 것과 같아요:

let showFahrenheit = true
let temperatureInCelsius = 30

let temperature = if showFahrenheit {
    temperatureInCelsius * 9 / 5 + 32
} else {
    temperatureInCelsius
}

지침

이 연습 문제에서는 차량 구매를 준비하는 데 도움이 될 코드를 작성해요.

세 가지 과제가 있어요. 하나는 두 차량 중에서 고르는 데 도움이 될지 판단하는 것, 하나는 어떤 운전면허가 필요한지 알아내는 것, 그리고 하나는 중고 차량의 적정 가격을 추정하는 것이에요.

1. 주어진 차량의 월 납부금을 감당할 수 있는지 계산하기

동네 자동차 딜러들이 모두 5년 0% 무이자 프로모션을 진행하고 있어서, 이 혜택을 이용하고 싶어요. 하지만 원하는 차의 월 납부금을 감당할 수 있을지 확신이 서지 않아요.

월 납부금은 차량의 총가격을 5년 동안의 개월 수로 나눈 값이에요.

다음 인자를 받는 canIBuy(vehicle:price:monthlyBudget:) 함수를 구현해요:

  • vehicle - 사고 싶은 차량의 이름이에요.
  • price - 사고 싶은 차량의 가격이에요.
  • monthlyBudget - 매달 지불할 수 있는 금액이에요.

함수는 다음 조건에 따라 아래 메시지를 반환해야 해요:

  • 차량의 월 납부금이 월 예산보다 작거나 같으면, "Yes! I'm getting a <vehicle>" 메시지를 반환해요.
  • 차량의 월 납부금이 월 예산을 최대 10%까지(포함) 초과하면, "I'll have to be frugal if I want a <vehicle>" 메시지를 반환해요.
  • 차량의 월 납부금이 월 예산을 10% 넘게 초과하면, "Darn! No <vehicle> for me" 메시지를 반환해요.
canIBuy(vehicle: "1974 Ford Pinto", price: 516.32, monthlyBudget: 100.00)
// returns "Yes! I'm getting a 1974 Ford Pinto"
canIBuy(vehicle: "2011 Bugatti Veyron", price: 2_250_880.00, monthlyBudget: 10000.00)
// returns "Darn! No 2011 Bugatti Veyron for me"
canIBuy(vehicle: "2020 Indian FTR 1200", price: 12_500, monthlyBudget: 200)
// returns "I'll have to be frugal if I want a 2020 Indian FTR 1200"

2. 필요한 운전면허 종류 알아내기

중고 차량을 사기로 했고, 그 차를 운전하려면 어떤 종류의 운전면허가 필요한지 알아내야 해요.

사고 싶은 차량의 바퀴 수를 담은 numberOfWheels 인자를 받는 licenseType(numberOfWheels:) 함수를 구현해요.

함수는 다음 조건에 따라 아래 메시지를 반환해야 해요:

  • 바퀴 수가 2 또는 3이면, "You will need a motorcycle license for your vehicle" 메시지를 반환해요.
  • 바퀴 수가 4 또는 6이면, "You will need an automobile license for your vehicle" 메시지를 반환해요.
  • 바퀴 수가 18이면, "You will need a commercial trucking license for your vehicle" 메시지를 반환해요.
  • 그 밖의 다른 수라면, "We do not issue licenses for those types of vehicles" 메시지를 반환해요.
licenseType(numberOfWheels: 2)
// returns "You will need a motorcycle license for your vehicle"
licenseType(numberOfWheels: 6)
// returns "You will need an automobile license for your vehicle"
licenseType(numberOfWheels: 18)
// returns "You will need a commercial trucking license for your vehicle"
licenseType(numberOfWheels: 0)
// returns "We do not issue licenses for those types of vehicles"

3. 중고 차량 가격 추정하기

이제 결정을 내렸으니, 딜러십에서 적정한 가격에 사고 싶어요. 중고 차량을 사려고 하니, 가격은 차량의 연식에 따라 달라져요. 대략적으로 추정해 보면, 차량이 3년 미만이면 새 차였을 때의 원래 가격의 80%라고 가정해요. 10년 이상이면 50%예요. 차량이 3년 이상이면서 10년 이하이면 원래 가격의 70%예요.

originalPrice와 yearsOld 인자를 받는 calculateResellPrice(originalPrice:yearsOld:) 함수를 구현해요. originalPrice는 차량의 원래 가격을 담고, yearsOld는 차량의 연식을 나타내요. 함수는 차량의 재판매 가격을 반환해야 해요.

calculateResellPrice(originalPrice: 1000, yearsOld: 1)
// returns 800
calculateResellPrice(originalPrice: 1000, yearsOld: 5)
// returns 700
calculateResellPrice(originalPrice: 1000, yearsOld: 15)
// returns 500
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Swift Exercism

골치 아픈 차량 구매 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Swift 트랙을 개념 35개연습 문제 116개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.