728x90
이번 포스트에서는 CodeUp의 3016번 "1등 한 학생의 성적" 문제를 풀어보겠다.
문제 설명은 다음과 같다.
입력과 출력은 다음과 같다.
## 문제 해석:
우선 총 학생 수를 입력받는다. 그런 다음에 입력받은 총 학생 수를 기반으로 각 데이터(학생 이름과 세 과목의 점수)를 입력받는다. 마지막으로 첫번째 과목에서 1등 한 학생의 이름과 두번째, 세번째 과목의 성적순을 출력하면 된다.
## 문제 풀이:
먼저 처리할 학생의 총 수를 입력 받는 코드를 작성한다. 학생_점수 리스트도 함께 작성한다.
sco_lst = []
n = int(input())
이어서 입력한 학생의 총 수를 바탕으로 리스트에 값을 채워가는 코드를 작성한다.
n = int(input())
for i in range(n):
name, fir, sec, thr = input().split()
sco_lst.append([name, int(fir), int(sec), int(thr)])
그럼 다음에 한줄 코드로 리스트를 점수 순으로 정렬하는 코드를 작성해보겠다. 여기서는 lamba를 사용하게 되며, 총 세 개의 리스트를 작성한다. (각각 첫번째 과목, 두번째 과목, 세번째 과목의 점수순으로 정렬)
sco_lst = []
n = int(input())
for i in range(n):
name, fir, sec, thr = input().split()
sco_lst.append([name, int(fir), int(sec), int(thr)])
sco_lst_sorted_by_fir = sorted(sco_lst, key=lambda a: a[1], reverse=True)
sco_lst_sorted_by_sec = sorted(sco_lst, key=lambda a: a[2], reverse=True)
sco_lst_sorted_by_thr = sorted(sco_lst, key=lambda a: a[3], reverse=True)
이제 첫번째 과목에서 일등을 한 학생의 이름을 변수에 저장하고, 두번째 과목의 점수만을 저장하는 리스트와 세번째 과목의 점수만을 저장하는 리스트를 작성한다. (여기서도 물론 성적순으로 리스트에 삽입)
sco_lst = []
n = int(input())
for i in range(n):
name, fir, sec, thr = input().split()
sco_lst.append([name, int(fir), int(sec), int(thr)])
sco_lst_sorted_by_fir = sorted(sco_lst, key=lambda a: a[1], reverse=True)
sco_lst_sorted_by_sec = sorted(sco_lst, key=lambda a: a[2], reverse=True)
sco_lst_sorted_by_thr = sorted(sco_lst, key=lambda a: a[3], reverse=True)
winner = sco_lst_sorted_by_fir[0][0]
sec_sco_lst = []
thr_sco_lst = []
for sco in sco_lst_sorted_by_sec:
sec_sco_lst.append(sco[2])
for sco in sco_lst_sorted_by_thr:
thr_sco_lst.append(sco[3])
마지막으로 각 과목 점수를 저장하는 리스트를 통해서 일등한 학생의 등수를 구한 다음에 변수에 저장하면 된다.
sco_lst = []
n = int(input())
for i in range(n):
name, fir, sec, thr = input().split()
sco_lst.append([name, int(fir), int(sec), int(thr)])
sco_lst_sorted_by_fir = sorted(sco_lst, key=lambda a: a[1], reverse=True)
sco_lst_sorted_by_sec = sorted(sco_lst, key=lambda a: a[2], reverse=True)
sco_lst_sorted_by_thr = sorted(sco_lst, key=lambda a: a[3], reverse=True)
winner = sco_lst_sorted_by_fir[0][0]
sec_sco_lst = []
thr_sco_lst = []
for sco in sco_lst_sorted_by_sec:
sec_sco_lst.append(sco[2])
for sco in sco_lst_sorted_by_thr:
thr_sco_lst.append(sco[3])
for idx, i in enumerate(sec_sco_lst):
if sco_lst_sorted_by_fir[0][2] == i:
winner_sec = idx + 1
break
for idx, i in enumerate(thr_sco_lst):
if sco_lst_sorted_by_fir[0][3] == i:
winner_thr = idx + 1
break
## 최종 코드:
sco_lst = []
sec_sco_lst = []
thr_sco_lst = []
n = int(input())
for i in range(n):
name, fir, sec, thr = input().split()
sco_lst.append([name, int(fir), int(sec), int(thr)])
sco_lst_sorted_by_fir = sorted(sco_lst, key=lambda a: a[1], reverse=True)
sco_lst_sorted_by_sec = sorted(sco_lst, key=lambda a: a[2], reverse=True)
sco_lst_sorted_by_thr = sorted(sco_lst, key=lambda a: a[3], reverse=True)
winner = sco_lst_sorted_by_fir[0][0]
for sco in sco_lst_sorted_by_sec:
sec_sco_lst.append(sco[2])
for sco in sco_lst_sorted_by_thr:
thr_sco_lst.append(sco[3])
for idx, i in enumerate(sec_sco_lst):
if sco_lst_sorted_by_fir[0][2] == i:
winner_sec = idx + 1
break
for idx, i in enumerate(thr_sco_lst):
if sco_lst_sorted_by_fir[0][3] == i:
winner_thr = idx + 1
break
print(winner, winner_sec, winner_thr)
## 실행 결과:
'Coding Test > CodeUp' 카테고리의 다른 글
CodeUp-3015 (성적표 출력) (0) | 2023.03.05 |
---|---|
CodeUp-3004 (데이터 재정렬) (0) | 2023.03.04 |
CodeUp-2623 (최대공약수 구하기) (0) | 2023.03.03 |
CodeUp-4012 (석차 계산) (0) | 2023.03.02 |
CodeUp-1805 (입체기동장치 생산공장) (0) | 2023.03.01 |