Algorithm

[python] 백준 2822 : 점수 계산

imsunbow 2023. 12. 11. 11:22

https://www.acmicpc.net/problem/2822

 

2822번: 점수 계산

8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문

www.acmicpc.net

 

백준 2822번 문제인 점수계산 문제이다. 8개의 입력값을 받아, 최대값 5개의 합을 출력하고 그들의 인덱스를 찾아 인덱스 번호를 공백없이 출력해야 한다.

 

 

#백준 2822 점수 계산

scores = []

for i in range(8):
    score = int(input())
    scores.append((score,i))

scores.sort(reverse=True, key=lambda x: x[0])

top_scores_indices = [index for _, index in scores[:5]]
top_scores_indices.sort()

sum_top_scores = sum(score for score, _ in scores[:5])
result = ' '.join(str(index+1) for index in top_scores_indices)

print(sum_top_scores)
print(result)

 

 

우선 빈 리스트를 하나 만들고, 반복문을 통해 score값과 index를 입력받았다. 그리고 score값을 기준으로 높은 순서대로 정렬하였다.

 

상위 5개 입력값의 합은 sum_top_scores라는 함수를 새로 생성시켜 점수들의 총합을 구하였고, 결과값은 공백을 통해 각 index를 출력시켰다. 

 

실행 결과, 정답은 맞았으나 코드가 굉장히 난잡하다. 정답에 끼워맞추는 코딩을 했기 때문이라고 생각된다.

 

ChatGPT를 통해 해당 문제의 코드를 더 깔끔하게 짤 수 있는지에 대해 물어보았다.

#백준 2822 점수 계산

# 점수와 인덱스를 저장하기 위한 리스트
scores = [(int(input()), i + 1) for i in range(8)]

# 점수 기준으로 내림차순 정렬
scores.sort(reverse=True)

# 상위 5개 점수 추출
top_scores = scores[:5]

# 총점 계산
total_score = sum(score for score, _ in top_scores)

# 인덱스 추출 및 정렬
indices = sorted(index for _, index in top_scores)

# 결과 출력
print(total_score)
print(' '.join(map(str, indices)))



 

해당 코드에서는 인덱스 리스트를 생성하고 top_score, total_score 라는 변수구조를 통해 값들을 구하였다. 인덱스를 위한변수를 하나 만들어서 정렬하였고, 마지막으로 join을 통해 결과를 출력하였다. 내 코드보다 가독성이 더 좋다고 느껴진다.

반응형