PS

[백준/Python] (S4) コンテスト (Contest) - 24123

MSHUN 2024. 3. 7.
반응형

Baekjoon Online Judge의 24123 コンテスト (Contest) 문제의 Python 풀이입니다.

 

24123번: コンテスト (Contest)

世の中には様々なプログラミングコンテストがある.例えば,情報オリンピック,ACM-ICPC,ICFP の 様に世界中の相手と競い合う物や, Supercomputing Contest,パソコン甲子園,EPOCH @まつやまの国

www.acmicpc.net

💻코드

# 입력 값 받기
num_participants, num_problems, _, min_score, num_logs = map(int, input().split())
# 각 문제의 점수를 저장하는 리스트
problem_scores = [int(input()) for _ in range(num_problems)]
# 로그 데이터를 저장하는 리스트
logs = [input().split() for _ in range(num_logs)]
# 참가자별 총 점수를 저장하는 리스트
participant_scores = [0] * num_participants
# 참가자와 문제별 로그 정보를 저장하는 딕셔너리
log_info = {}

# 로그 데이터 처리
for time, participant_id, problem_id, status in logs:
    participant_id, problem_id = int(participant_id), int(problem_id)
    key = (participant_id, problem_id)

    # 문제를 열람한 경우
    if status == 'open':
        log_info[key] = [int(time), 0]  # 시작 시간과 오답 횟수 저장
    elif status == 'incorrect':
        log_info[key][1] += 1  # 오답 횟수 증가
    else:  # 정답인 경우
        # 점수 계산: 문제 점수 - (해결 시간 - 시작 시간) - 오답 횟수*120 중 최소 점수와 비교
        participant_scores[participant_id - 1] += max(
            problem_scores[problem_id - 1] - (int(time) - log_info[key][0]) - 120 * log_info[key][1],
            min_score)

# 참가자별 점수 출력
for score in participant_scores:
    print(score)

🧠풀이

참가자 수, 문제 수, 경쟁 시간, 최소 점수, 로그 수를 입력받기.
각 문제의 점수를 리스트에 저장.
로그 데이터(시간, 참가자 번호, 문제 번호, 상태)를 리스트에 저장.
참가자별 총 점수를 0으로 초기화한 리스트를 만들기.
로그 데이터를 순회하면서 각 참가자가 문제를 해결하기 시작한 시간과 오답 제출 횟수를 저장.
참가자가 문제를 정답으로 제출했을 때, 점수를 계산하여 참가자의 총 점수에 추가. 점수 계산은 문제 점수에서 (해결 시간 - 시작 시간)과 오답 제출 횟수에 따른 패널티를 뺀 값과 최소 점수 중 더 큰 값을 사용.
모든 로그 데이터 처리가 완료되면, 각 참가자의 총 점수를 출력.

🤔느낀 점

딕셔너리와 리스트를 사용하여 풀이하는 방법을 익힐 수 있었고 문제를 해결하면서 시뮬레이션 유형의 문제에 대한 접근 방식과 파이썬의 기본 자료구조를 사용하는 능력을 향상시킬 수 있었다.

Baekjoon Online Judge

반응형

댓글