티스토리 뷰

📚 문제

입력

출력

예제 입력 1

4 4
10 20 30 40
1 O X X X
2 X O X X
3 X X O X
4 X X X O

예제 출력 1

4 40

예제 입력 2

4 8
10 20 30 40
1 O X X X
2 X O X X
3 X X O X
4 X X X O
80 O O O O
70 O O O O
60 O O O O
50 O O O O

예제 출력 2

50 100

🧑🏻‍💻 풀이 과정

  • 입력 받은 수험번호(num)을 딕셔너리(_dict)에 추가하고, 반복하면서 채점결과(arr)가 O라면 점수를 더 해주자.
  • 가장 높은 점수를 받은 학생 중, 가장 낮은 수험번호를 구하기 위해 min_student를 1000001로 초기화하자.
  • 딕셔너리(_dict)를 반복하면서 최대 점수와 같은 요소의 k를 min_student와 비교해서 더 낮은 수험번호가 저장되도록 하자.
  • print(min_student, max_val)에는 가장 높은 점수를 받은 학생 중, 가장 낮은 수험번호가장 높은 점수가 출력된다.
def mid_score():
    scores = list(map(int, input().split()))
    len_score = len(scores)

    _dict = {}
    for i in range(m):
        data = list(map(str, input().split()))
        # num: 수험번호, arr: 채점결과
        num, arr = data[0], data[1:]

        _dict[num] = _dict.setdefault(num, 0)
        for j in range(len_score):
            # 정답(O)이면, 점수 더 해주기
            if arr[j] == 'O':
                _dict[num] += scores[j]

    # min_student: 수험 번호는 최대 100_000
    min_student = 100001
    # max_val: 가장 높은 점수
    max_val = max(_dict.values())
    for k, v in _dict.items():
        if v == max_val:
            min_student = min(min_student, int(k))

    print(min_student, max_val)


n, m = map(int, input().split())
mid_score()
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함