Yozzang의 해킹일기 💻
article thumbnail
728x90

이번 포스트에서는 CodeUp의 3016번 "1등 한 학생의 성적" 문제를 풀어보겠다.

CodeUp


문제 설명은 다음과 같다.

문제 설명

입력과 출력은 다음과 같다.

입력
출력

## 문제 해석:

우선 총 학생 수를 입력받는다. 그런 다음에 입력받은 총 학생 수를 기반으로 각 데이터(학생 이름과 세 과목의 점수)를 입력받는다. 마지막으로 첫번째 과목에서 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
profile

Yozzang의 해킹일기 💻

@요짱

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!