https://www.acmicpc.net/problem/2822
백준 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을 통해 결과를 출력하였다. 내 코드보다 가독성이 더 좋다고 느껴진다.
반응형
'Algorithm' 카테고리의 다른 글
[c] 구조체를 정의하고, 데이터들을 입력받아 결과값을 산출하기 (0) | 2023.12.13 |
---|---|
[c] 연산 구조체를 정의하고, 변수를 생성하여 구조체를 반환하기 (0) | 2023.12.12 |
[python] 백준 5597 : 과제 안 내신 분..? (0) | 2023.11.28 |
[python] 백준 10807 : 개수 세기 (0) | 2023.11.27 |
[python] 백준 10988 : 팰린드롬인지 확인하기 (0) | 2023.11.26 |