트랙
/
C++
C++
/
연습 문제
/
프리랜서 요율
프리랜서 요율

프리랜서 요율

학습 연습 문제

소개

C++의 기본 제공 숫자 타입은 정수와 실수로 나눌 수 있어요. 정수는 0, 691, -2처럼 소수점이 없는 수예요. 실수는 6.02214076, 0.1, -1.616처럼 소수점이 있는 수예요.

정수

다음 예제는 서로 다른 네 개의 변수를 선언하고 초기화하는 모습을 보여줘요.

int m_morales{9241};              // base 10: 0-9
int a_apaec{0x24CD};              // base 16: 0-9 and A-F
int m_gargan{0b10010000011001};   // base  2: 0-1
int b_reilly{022031};             // base  8: 0-7
                                  // Leading with a 0 not the letter o.

int 변수에 값을 대입할 때는 리터럴을 사용해 바로 대입할 수 있어요. 리터럴은 9241처럼 코드에 직접 적어 넣은 수예요. 표현 방식의 진법에 따라 여러 가지 정수 리터럴이 있어요. 10진수 정수 리터럴이 가장 흔하고, 0부터 9까지의 숫자를 사용해요. 0x 같은 특별한 접두사를 붙이면 다른 진법도 사용할 수 있어요. 위 예제는 숫자 9241을 네 가지 표현과 접두사로 나타낸 거예요. 모든 변수는 같은 값으로 초기화돼요.

여러 표현 방식에 대한 자세한 내용은 간단한 튜토리얼을 참고해요.

가독성을 높이려면 작은따옴표로 숫자를 구분할 수 있어요. 9'241은 0b0100'100'0001'1001 또는 92'4'1과 같아요.

실수

실수 리터럴에는 두 가지 형태가 있어요. 직관적인 0.0024 외에도 과학적 표기법인 2.4e-3을 사용할 수 있어요. 가장 흔한 실수형은 double이에요.

산술 연산

C++은 +, -, *, /, (, ), %를 사용해 표현식을 만들 수 있어요. 두 정수 사이의 연산 결과도 정수예요. 5 / 2는 2를 반환해요. 연산에 포함된 타입 중 하나가 실수형이면 결과도 실수형이 돼요. 5.0 / 2와 5 / 2.0은 2.5를 반환해요. %는 나머지 연산자로, 정수 나눗셈의 나머지를 반환해요. 5%3은 2예요.

대입 연산자

대입 연산자는 변수에 리터럴 값을 대입해요. 대입은 항상 오른쪽에서 왼쪽으로 이루어지고, 그 반대는 안 돼요.

int length = 5;
int width = 2;
length = width;

여기서는 정수 값 5가 변수 length에 대입돼요. 그다음 정수 값 2가 변수 width에 대입돼요. 마지막으로 width의 값이 변수 length로 복사되고, 이전 값 5는 사라져요. 또한 대입 연산이 일어나는 순간에만 width의 값을 length에 대입한다는 점도 기억해요. 따라서 나중에 width의 값이 바뀌더라도 length의 값에는 영향을 주지 않아요.

대입 연산자는 산술 및 비트 연산자 같은 다른 연산자와 결합할 수 있어요. 이런 연산자를 compound assignment 연산자라고 하고, +=, -=, *=, /=, %=가 있어요. 이 연산자들은 변수의 현재 값에 연산을 수행해서 값을 바꿔요.

// we start with 0 people
int people{};
// we need 0 eggs
int eggs{};
// two people joined:
people += 2;
// people is now 2
// let's add 3 eggs per person
eggs += 3 * people;
// eggs is now 6

변수 people과 eggs는 0으로 초기화돼요. 그다음 변수 people의 기존 값 0에 정수 값 2를 더하고, 그 결과를 다시 people에 대입해요. 이제 people은 2가 돼요. 그다음 사람마다 계란 3개씩 더하는데, 모두 합하면 계란 6개가 돼요. 이제 이 6을 변수 eggs의 기존 값 0에 더하고, 그 결과를 다시 eggs에 대입해요. 이제 eggs는 6이 돼요. 같은 의미의 표현식은 people = people + 2와 eggs = eggs + (3 * people)예요.

지침

이 연습 문제에서는 프리랜서가 프로젝트 관리자와 소통할 수 있도록 돕는 코드를 작성해요. 이번 과제는 일당과 월 요금을 빠르게 계산하는 몇 가지 유틸리티를 만드는 거예요. 원한다면 주어진 할인을 적용할 수도 있어요.

먼저 프리랜서와 프로젝트 관리자 사이에 몇 가지 규칙을 정해요.

  • 일당은 시급의 8배예요.
  • 한 달에는 청구 가능한 날이 22일 있어요.

때로는 프리랜서가 일당에 할인을 적용해 주기도 해요. 예를 들어 가장 충성도가 높은 고객이나 비영리 고객에게요.

할인은 백분율을 나타내는 소수로 표현해요. 예를 들어 25.0은 25%를 뜻해요.

1. 시급이 주어졌을 때 일당 계산하기

시급을 매개변수로 받아 일당을 계산하는 daily_rate 함수를 구현해요. 계약에는 하루에 청구 가능한 시간이 8시간이라고 명시되어 있어요.

daily_rate(60)
// => 480.0

반환되는 일당은 double 타입이어야 해요.

2. 할인된 가격 계산하기

할인을 적용한 뒤의 가격을 계산하는 apply_discount 함수를 구현해요. 이 함수는 원래 가격과 할인율(퍼센트) 두 가지 매개변수를 받아야 해요.

apply_discount(150, 10)
// => 135.0

반환되는 값은 항상 double 타입이어야 하고, 어떤 방식으로든 반올림하면 안 돼요.

3. 시급과 할인이 주어졌을 때 월 요금 계산하기

할인이 적용된 월 요금을 계산하는 monthly_rate 함수를 구현해요. 이 함수는 시급과 할인율(퍼센트) 두 가지 매개변수를 가져야 해요.

monthly_rate(77, 10.5)
// => 12130

반환되는 월 요금은 가장 가까운 정수로 올림(천장 함수)해야 해요.

4. 예산, 시급, 할인이 주어졌을 때 완전한 근무일 수 계산하기

예산, 시급, 할인을 받아 그 예산으로 며칠 동안 완전히 일할 수 있는지 계산하는 days_in_budget 함수를 구현해요.

days_in_budget(20'000, 80, 11.0)
// => 35

반환되는 일수는 가장 가까운 정수로 내림(바닥 함수)해야 해요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
C++ Exercism

프리랜서 요율 문제를 시작해 볼 준비가 됐나요?

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