Hi, There!
안녕하세요, 바오밥입니다.
목차
- 문제
- 풀이
문제
문제 설명
직업에 아르바이트, 판매사원이 있습니다.
직원들 급여의 총합을 계산하기 위해 아래와 같이 Job, PartTimeJob, SalesJob 클래스를 작성했습니다.
- Job :
- Job : 직업을 나타내는 클래스입니다.
- salary : 직업의 급여를 나타냅니다. 초기 급여는 0입니다.
- get_salary : 직업의 급여를 return 합니다.
- PartTimeJob :
- PartTimeJob : 아르바이트를 나타내는 클래스이며 Job을 상속합니다.
- work_hour : 아르바이트를 한 시간입니다.
- pay_per_hour : 아르바이트의 시간 당 급여입니다.
- get_salary : 아르바이트 급여를 계산하여 return 합니다.
- SalesJob :
- SalesJob : 판매사원을 나타내는 클래스이며 Job을 상속합니다.
- sales_result : 판매사원의 판매실적입니다.
- pay_per_sale : 판매실적 당 급여입니다.
- get_salary : 판매사원의 급여를 계산하여 return 합니다.
주어진 아르바이트, 판매사원 급여의 총합을 계산하려 합니다.
- 아르바이트는 기본적으로 아르바이트를 한 시간 X 시간 당 급여를 받으며 40시간 이상 근무시 8시간만큼의 급여를 추가로 받습니다.
- 판매사원은 기본적으로 판매실적 * 판매실적 당 급여를 받으며 판매실적이 10건이 넘으면 급여를 2배로, 20건이 넘으면 급여를 3배로 받습니다.
아르바이트의 정보가 담긴 2차원 리스트 part_time_jobs, 판매사원의 정보가 담긴 2차원 리스트 sales_jobs가 매개변수로 주어질 때, 모든 직원들 급여의 총합을 return 하도록 solution 함수를 작성하려 합니다.
위 클래스 구조를 참고하여 주어진 코드의 빈칸을 적절히 채워 전체 코드를 완성해주세요.
매개변수 설명
아르바이트의 정보가 담긴 2차원 리스트 part_time_jobs, 판매사원의 정보가 담긴 2차원 리스트 sales_jobs가 solution 함수의 매개변수로 주어집니다.
- part_time_jobs은 길이가 1이상 10이하인 2차원 리스트입니다.
- part_time_jobs의 각 원소는 [아르바이트를 한 시간, 시간 당 급여]입니다.
- 아르바이트를 한 시간은 1이상 100이하입니다.
- 시간 당 급여는 1,000이상 20,000이하입니다.
- sales_jobs은 길이가 1이상 10이하인 2차원 리스트입니다.
- sales_jobs의 각 원소는 [판매실적, 판매실적 당 급여]입니다.
- 판매실적은 1이상 30이하입니다.
- 판매실적 당 급여는 1,000이상 20,000이하입니다.
return 값 설명
모든 직원들 급여의 총합을 return 합니다.
입출력 예
입출력 예 설명
첫번째 아르바이트에게 50,000(10 * 5,000)을 지급합니다.
두번째 아르바이트에게 346,800(43 * 6,800 + 8 * 6,800)을 지급합니다.
세번째 아르바이트에게 64,000(5 * 12,800)을 지급합니다.
첫번째 영업사원에게 54,000(3 * 18,000)을 지급합니다.
두번째 영업사원에게 204,000(12 * 8,500 * 2)을 지급합니다.
따라서 급여의 총합은 718,800입니다.
풀이
풀이 코드 및 해설
# Job이라는 수퍼 클래스 생성
# salary 라는 속성을 가지고 있음
class Job:
def __init__(self):
# 생성자 메서드를 통해서 salary 변수 초기화
self.salary = 0
def get_salary(self):
# salary 값 반환하는 메서드
return salary
# Job이라는 수퍼클래스를 상속 받음
class PartTimeJob(Job)
def __init__(self, work_hour, pay_per_hour):
# 생성자 메서드 실행, 인수는 일한 시간과 시급
super().__init__()
# 수퍼 클래스의 생성자 메서드 실행
self.work_hour = work_hour
# PartTimeJob 클래스의 근무 시간 저장
self.pay_per_hour = pay_per_hour
# PartTimeJob 클래스의 시급 저장
def get_salary(self):
# salary 값을 반환하는 메서드 선언
self.salary = self.work_hour * self.pay_per_hour
# salary 값은 근무 시간 * 시급
if self.work_hour >= 40:
self.salary += (self.pay_per_hour * 8)
# 근무 시간 40시간 초과시 주휴수당 제공
return self.salary
# salary 반환
# Job이라는 수퍼클래스를 상속 받음
class SalesJob(Job):
def __init__(self, sales_result, pay_per_sale):
# 생성자 메서드 실행, 인수는 판매실적와 판매실적당 급여
super().__init__()
# 수퍼 클래스의 생성자 메서드 실행
self.sales_result = sales_result
# 해당 클래스의 계약 단가를 저장
self.pay_per_sale = pay_per_sale
# 해당 클래스의 정산 인센티브 단가를 저장
def get_salary(self):
# 10건, 20건 넘을시 보너스가 존재함
# 해당 보너스를 고려하여 최종 급여 정산
if self.sales_result > 20:
self.salary = self.sales_result * self.pay_per_sale * 3
elif self.sales_result > 10:
self.salary = self.sales_result * self.pay_per_sale * 2
else:
self.salary = self.sales_result * self.pay_per_sale
# 계산된 최종 급여를 반환
return self.salary
def solution(part_time_jobs, sales_jobs):
answer = 0
for p in part_time_jobs:
part_time_job = PartTimeJob(p[0], p[1])
answer += part_time_job.get_salary()
for s in sales_jobs:
sale_job = SalesJob(s[0], s[1])
answer += sale_job.get_salary()
return answer
'Certificate > Cert - Cos Pro 1급' 카테고리의 다른 글
[프로그래머스] Cos Pro 1급 모의고사, 코인을 많이 획득하세요 (2) | 2021.07.01 |
---|---|
[프로그래머스] Cos Pro 1급 모의고사, 만났을 때 최대인 경우 (0) | 2021.06.30 |
[프로그래머스] Cos Pro 1급 모의고사, UP AND DOWN 게임 (0) | 2021.06.30 |
[프로그래머스] Cos Pro 1급 모의고사, 지그재그 수열 (0) | 2021.06.30 |
[프로그래머스] Cos Pro 1급 모의고사, 스택으로 큐 구현 (0) | 2021.06.29 |