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

[COS PRO 2급 #4-2] 시험 합격자가 몇 명이지?

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

문제설명

체력시험 합격 인원을 알아보려고 합니다. 체력시험 종목으로는 윗몸일으키기, 팔굽혀펴기, 달리기가 있습니다. 종목별 합격기준은 다음과 같습니다.

| 윗몸일으키기 | 팔굽혀펴기 | 달리기 |
|---|---|---|
| 80점 이상 | 88점 이상 | 70점 이상 |

* 통과한 종목이 하나 이하거나, 통과 점수의 반을 넘기지 못한 종목이 있다면 불합격입니다.
* 그 외에는 합격입니다.

시험에 합격한 인원을 구하기 위해 다음과 같이 프로그램 구조를 작성했습니다.

```
1. 통과한 종목이 몇 개인지 셉니다.
2. 통과 점수의 반을 넘기지 못한 종목이 몇 개인지 셉니다.
3. 통과한 종목이 하나보다 많고 통과 점수의 반을 넘기지 못한 종목이 없으면 통과한 인원으로 셉니다.
```
각 종목 기록을 담고 있는 리스트 scores가 매개변수로 주어질 때, 시험에 합격한 인원을 return 하도록 solution 함수를 작성하려 합니다. 위 구조를 참고하여 코드가 올바르게 동작할 수 있도록 빈칸에 주어진 func_a, func_b func_c 함수와 매개변수를 알맞게 채워주세요.

매개변수 설명

각 종목 기록을 담고 있는 리스트 scores가 solution 함수의 매개변수로 주어집니다.

* scores에는 윗몸일으키기, 팔굽혀펴기, 달리기 점수가 차례로 들어있습니다.
* scores의 원소는 0 이상 100 이하인 정수입니다.
* scores의 길이는 0 이상 10,000 이하인 정수입니다.

return 값 설명

시험에 합격한 인원을 return합니다.

예시

| score | return |
|---|---|
| [[30, 40, 100], [97, 88, 95]] | 1 |
| [[90, 88, 70], [85, 90, 90], [100, 100, 70], [30, 90, 80], [40, 10, 20], [83, 88, 80]] | 4 |

예시설명

예시 #1
1번째 사람은 윗몸일으키기 30점, 팔굽혀펴기 40점으로 합격 점수의 반을 통과하지 못해 불합격입니다.
2번째 사람은 윗몸일으키기 97점, 팔굽혀펴기 88점, 달리기 95점으로 모두 통과하여 합격입니다. 따라서 총 1명이 합격하였습니다.

예시 #2
1번째, 2번째, 3번째, 6번째 사람이 합격 기준을 만족하여 총 4명이 합격하였습니다.

문제 코드

def func_a(passed, non_passed):
    return ( passed > 1 and non_passed ==0 )

def func_b(scores):
    answer = 0
    if scores[0] < 40:
        answer += 1
    if scores[1] < 44:
        answer += 1
    if scores[2] < 35:
        answer += 1
    return answer

def func_c(scores):
    answer = 0
    if scores[0] >= 80:
        answer += 1
    if scores[1] >= 88:
        answer += 1
    if scores[2] >= 70:
        answer += 1
    return answer

def solution(scores):
    answer = 0
    for my_score in scores:
        passed = func_@@@(@@@)
        non_passed = func_@@@(@@@)
        answer += func_@@@(@@@, @@@)
    return answer

풀이

# 통과 종목이 1개 초과이고 통과 점수의 반을 넘기지 못한 종목이 없으면 True
# 통과 종목이 1개 이하이거나 통과 점수의 반을 넘기지 못한 종목이 있으면 False
def func_a(passed, non_passed):
    return ( passed > 1 and non_passed ==0 )

# 통과 점수의 반을 넘기지 못한 종목 개수 구하기
def func_b(scores):
    answer = 0
    if scores[0] < 40:
        answer += 1
    if scores[1] < 44:
        answer += 1
    if scores[2] < 35:
        answer += 1
    return answer

# 통과 종목 개수 구하기
def func_c(scores):
    answer = 0
    if scores[0] >= 80:
        answer += 1
    if scores[1] >= 88:
        answer += 1
    if scores[2] >= 70:
        answer += 1
    return answer

def solution(scores):
    answer = 0
    for my_score in scores:
        passed = func_c(my_score)
        non_passed = func_b(my_score)
        # 파이선에서 True는 1, False는 0
        answer += func_a(passed, non_passed)
    return answer

댓글