트랙
/
Ruby
Ruby
/
연습 문제
/
조립 라인
조립 라인

조립 라인

학습 연습 문제

소개

숫자

Ruby에서 가장 흔한 숫자 유형 두 가지는 다음과 같아요:

  • 정수: 소수점 뒤에 숫자가 없는 수예요. 예로 -6, 0, 1, 25, 976, 500000 등이 있어요.
  • 실수: 소수점 뒤에 숫자가 하나 이상 있는 수예요. 예로 -2.4, 0.1, 3.14, 16.984025, 1024.0 등이 있어요.

정수와 실수는 각각 Integer와 Float 클래스로 구현돼요.

이 클래스들에는 값을 서로 변환해 주는 메서드가 있어요. Integer는 정수 단위까지 정확한 반면, Float는 소수 단위까지 정밀하게 표현할 수 있어요:

  • Integer#to_f: 새 실수로 변환해요
  • Float#ceil: 가장 가까운 정수로 올림해요
  • Float#floor: 가장 가까운 정수로 내림해요
  • Float#round: 가장 가까운 정수로 반올림해요
  • Float#to_i: 가장 가까운 정수로 버림해요

조건문

Ruby에는 흐름 제어 표현식이라는 것이 있는데, 프로그램이 실행되는 방식을 제어하는 데 사용되며 truthy 또는 falsey 값을 가져요. truthy 또는 falsey 값을 만들어 내는 데 사용할 수 있는 연산자도 있는데, 이를 비교 연산자라고 해요.

어떤 코드가 실행되고 어떤 코드가 실행되지 않을지, 즉 어느 분기가 실행될지를 제어하는 주요 제어 표현식이 두 가지 있어요.

그 두 가지는 if와 unless 표현식이에요.

비교 연산자

비교 연산자는 값을 비교하고 true 또는 false 값을 반환하는 데 사용돼요. 다음 연산자들은 같은 타입의 두 값을 비교해야 해요. 값의 타입이 다르면 컴파일러가 오류를 발생시켜요. 다음은 연산자 목록과, 이들이 true 값을 내놓는 예시예요:

메서드 설명 예시
< 보다 작음 4 < 5
<= 작거나 같음 4 <= 4
> 보다 큼 3 > 1
>= 크거나 같음 2 >= 2

같음과 같지 않음 연산자는 앞서 언급한 연산자들과 달리 어떤 타입의 값이든 비교하는 데 사용할 수 있어요. == 연산자는 두 값이 같은지 확인하는 데 사용되며, 값의 타입까지 확인해요. !=도 같은 방식으로 동작하지만, 값이 같지 않으면 true를, 같으면 false를 반환해요. 다음은 같음과 같지 않음 연산자 목록과, 이들이 true 값을 내놓는 예시예요:

메서드 설명 예시
== 같음 4 == 4
!= 같지 않음 5 != 4

if문

if문은 주어진 조건이 "truthy"인지 "falsey"인지 확인하는 데 사용돼요. 조건이 truthy이면 if문 안의 코드가 실행돼요. if문은 end 키워드로 끝나요.

value = 1
if value == 1
  "1 is equal to 1"
end
# => "1 is equal to 1"

if value > 2
  "1 is greater than 2"
end
# => nil

unless문

unless문은 if문과 아주 비슷하게 동작하지만, 조건이 falsey일 때 unless문 안의 코드를 실행해요.

value = 1
unless value == 1
  "1 is not equal to 1"
end
# => nil

unless value > 2
  "1 is not greater than 2"
end
# => "1 is not greater than 2"

else문

else문은 if문과 함께 사용할 수 있어요. else문은 if 분기가 실행되지 않았을 때 실행돼요.

value = 1
if value == 1
  "1 is equal to 1"
else
  "1 is not equal to 1"
end
# => "1 is equal to 1"

"연쇄 if"문

elsif문은 if문과 함께 사용할 수 있어요. elsif문은 if 분기가 실행되지 않았고 elsif문의 조건이 truthy일 때 실행돼요. elsif문은 여러 개를 이어 붙일 수 있고, 처음으로 truthy인 조건이 실행돼요. if문 끝에 else문을 둘 수도 있는데, 앞선 문들이 모두 참이 아니었을 때 실행돼요.

value = 1
if value != 1
  "1 is not equal to 1"
elsif value > 2
  "1 is greater than 2"
else
  "1 is not equal to 1 and 1 is not greater than 2"
end
# => "1 is not equal to 1 and 1 is not greater than 2"

지침

이 연습 문제에서는 자동차 공장의 조립 라인 생산량을 분석하는 코드를 작성해요. 조립 라인의 속도는 0(꺼짐)에서 10(최대)까지 설정할 수 있어요.

가장 느린 속도(1)에서는 한 시간에 221대의 자동차를 생산해요. 생산량은 속도에 따라 선형적으로 증가해요. 따라서 속도를 4로 설정하면 한 시간에 4 * 221 = 884대의 자동차를 생산해야 해요. 하지만 속도가 높아질수록 결함이 있는 자동차가 생산될 가능성도 커지고, 그런 자동차는 폐기해야 해요. 다음 표는 속도가 성공률에 어떤 영향을 주는지 보여줘요.

  • 1에서 4까지: 성공률 100%.
  • 5에서 8까지: 성공률 90%.
  • 9: 성공률 80%.
  • 10: 성공률 77%.

두 가지 작업이 있어요.

1. 시간당 생산량 계산하기

성공률을 고려해서 조립 라인의 시간당 생산량을 계산하는 AssemblyLine#production_rate_per_hour 메서드를 구현해요. 반환되는 값은 Float의 인스턴스라는 점에 유의해요.

AssemblyLine.new(6).production_rate_per_hour
#=> 1193.4

2. 분당 생산되는 정상 제품 수 계산하기

분당 몇 대의 완성된, 정상 작동하는 자동차가 생산되는지 계산하는 AssemblyLine#working_items_per_minute 메서드를 구현해요. 반환되는 값은 Integer의 인스턴스라는 점에 유의해요.

AssemblyLine.new(6).working_items_per_minute
#=> 19
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Ruby Exercism

조립 라인 문제를 시작해 볼 준비가 됐나요?

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