본문 바로가기
Python/알고리즘

[COS PRO 2급 #4-7] 가장 많이 오른 점수와 가장 많이 떨어진 점수 구하기

by 포푸리 (POPOOLY) 2023. 1. 29.
반응형

문제설명

중간시험 점수와 기말시험 점수가 있습니다. 이를 바탕으로 점수가 가장 많이 오른 학생의 점수 차이와 가장 많이 떨어진 학생의 점수 차이를 구하려 합니다. 이를 위해 다음과 같이 프로그램 구조를 작성했습니다.

```
1. 각 학생에 대하여 기말고사 점수에서 중간고사 점수를 뺀 값의 최댓값을 구합니다.
2. 각 학생에 대하여 기말고사 점수에서 중간고사 점수를 뺀 값의 최솟값을 구합니다.
3. 1번과 2번 과정에서 구한 점수를 리스트에 담아 return 합니다.
```

예를 들어 중간시험 점수가 [20, 50, 40]이고, 기말시험 점수가 [10, 50, 70]이면, 학생의 시험 점수 차이는 [-10, 0, 30]입니다. 따라서 성적이 가장 많이 오른 학생은 30점이 올랐습니다. 그리고 성적이 가장 많이 떨어진 학생은 10점이 떨어졌습니다.

학번순으로 중간시험 점수를 담은 리스트 mid_scores와 학번순으로 기말시험 점수를 담은 리스트 final_scores가 solution 함수의 매개변수로 주어집니다. 이 때 성적이 가장 많이 오른 학생의 점수 차이를 **리스트 첫 번째 원소** 로, 성적이 가장 많이 떨어진 학생의 점수 차이를 **두 번째 원소** 로 담은 리스트를 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 <U>**한 줄**</U>만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.

매개변수 설명

학번순으로 중간시험 점수를 담은 리스트 mid_scores와 학번순으로 기말시험 점수를 담은 리스트 final_scores가 solution 함수의 매개변수로 주어집니다. 

* 시험 점수는 100 이하인 자연수입니다.
* mid_scores의 길이는 5 이상 50 이하입니다.
* 리스트 mid_scores의 길이와 리스트 final_scores의 길이는 같습니다.

return 값 설명

성적이 가장 많이 오른 학생의 점수 차이를 **리스트 첫 번째 원소** 로 하고,  성적이 가장 많이 떨어진 학생의 점수 차이를 **두 번째 원소** 로 담은 리스트를 return 해주세요.
* 점수가 오른 학생이 없으면 첫 번째 원소에 0을 넣고, 점수가 떨어진 학생이 없으면 두 번째 원소에 0을 넣도록 합니다.

예시

| mid_scores |final_scores |return |
|---|---|---|
| [20, 50, 40] | [10, 50, 70]|[30, -10]|

문제 코드

def func_a(scores1, scores2):
    answer = 0
    for score1, score2 in zip(scores1, scores2):
        answer = max(answer, score2 - score1)
    return answer

def func_b(scores1, scores2):
    answer = 0
    for score1, score2 in zip(scores1, scores2):
        answer = min(answer, score1 - score2)
    return answer
            
def solution(mid_scores, final_scores):
    up = func_a(mid_scores, final_scores)
    down = func_b(mid_scores, final_scores)
    answer = [up, down]
    return answer

풀이

# 점수가 가장 많이 오른 학생의 점수 차이 구하기
def func_a(scores1, scores2):
    answer = 0
    for score1, score2 in zip(scores1, scores2):
        answer = max(answer, score2 - score1)
    return answer

# 점수가 가정 적게 오른 학생의 점수 차이 구하기
def func_b(scores1, scores2):
    answer = 0
    for score1, score2 in zip(scores1, scores2):
    	# score1에 기말고사 점수, score2에 중간고사 점수를 넣어줘야 함
        answer = min(answer, score1 - score2)
    return answer
            
def solution(mid_scores, final_scores):
    up = func_a(mid_scores, final_scores)
    # func_b의 구조에 맞게 변수 순서 변경
    down = func_b(final_scores, mid_scores)
    answer = [up, down]
    return answer

댓글