본문 바로가기

Certificate/Cos Pro 1급 (Python)

[프로그래머스] Cos Pro 1급 모의고사, 급여 총합 구하기

Hi, There!
안녕하세요, 바오밥입니다.


목차

  1. 문제
  2. 풀이

문제

문제 설명

직업에 아르바이트, 판매사원이 있습니다.

직원들 급여의 총합을 계산하기 위해 아래와 같이 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