파이썬 백준 10825번
실버4
https://www.acmicpc.net/problem/10825
문제 보기
분류: 정렬
문제 풀기
sort() 함수와 lambda 를 이용하여 한 줄로 작성을 하려 했는데 생각처럼 되지 않았다.
아니 다시 해보니 생각대로 된다. 답안은 이미 제출했는데.. 맥주의 힘인가..
괄호를 치는데 잘못됨이 있었다 더 공부하자
문제에서 제시한 조건 1. 2. 3. 4. 순서를 보면 순차적으로 다음 조건을 제시하는데 이는 이름이 제일 중요도가 낮음이 된다. 따라서 제일 중요도가 낮은 이름으로 먼저 정렬을 한 후, 수학, 영어 그리고 국어로 정렬을 진행한다.
이때, 이름은 사전 순이기에 오름차순, 수학은 감소하는 순서인 내림차순, 영어는 오름차순 그리고 국어는 내림차순으로 정렬을 한다.
입력은 grade_ls 리스트에 모두 string 으로 입력을 받고 정렬을 하는 과정에서 integer 로 변환하여 정렬을 한다.
grade_ls.sort(key = lambda x: (-int(x[1]), int(x[2]), -int(x[3]), str(x[0])))
코드 보기
import sys
inputdata = sys.stdin.readline
def fnSortGrades():
grade_ls.sort(key = lambda x: (-int(x[1]), int(x[2]), -int(x[3]), str(x[0])))
# print(grade_ls) # test print
return grade_ls
if __name__ == "__main__":
N = int(inputdata().strip())
grade_ls = [list(map(str, inputdata().split())) for _ in range(N)]
# print(grade_ls) # test print
result = fnSortGrades()
for res in result:
print(res[0])
추가 하기
처음 제출한 코드
import sys
inputdata = sys.stdin.readline
def fnSortGrades():
grade_ls.sort(key = lambda x: str(x[0]))
print(grade_ls) # test print
grade_ls.sort(key = lambda x: int(x[3]), reverse = True)
print(grade_ls) # test print
grade_ls.sort(key = lambda x: int(x[2]))
print(grade_ls) # test print
grade_ls.sort(key = lambda x: int(x[1]), reverse = True)
print(grade_ls) # test print
return grade_ls
if __name__ == "__main__":
N = int(inputdata().strip())
grade_ls = [list(map(str, inputdata().split())) for _ in range(N)]
print(grade_ls) # test print
result = fnSortGrades()
for res in result:
print(res[0])
# 12
# Junkyu 50 60 100
# Sangkeun 80 60 50
# Sunyoung 80 70 100
# Soong 50 60 90
# Haebin 50 60 100
# Kangsoo 60 80 100
# Donghyuk 80 60 100
# Sei 70 70 70
# Wonseob 70 70 90
# Sanghyun 70 70 80
# nsj 80 80 80
# Taewhan 50 60 90
# [['Junkyu', '50', '60', '100'], ['Sangkeun', '80', '60', '50'], ['Sunyoung', '80', '70', '100'], ['Soong', '50', '60', '90'], ['Haebin', '50', '60', '100'], ['Kangsoo', '60', '80', '100'], ['Donghyuk', '80', '60', '100'], ['Sei', '70', '70', '70'], ['Wonseob', '70', '70', '90'], ['Sanghyun', '70', '70', '80'], ['nsj', '80', '80', '80'], ['Taewhan', '50', '60', '90']]
# [['Donghyuk', '80', '60', '100'], ['Haebin', '50', '60', '100'], ['Junkyu', '50', '60', '100'], ['Kangsoo', '60', '80', '100'], ['Sanghyun', '70', '70', '80'], ['Sangkeun', '80', '60', '50'], ['Sei', '70', '70', '70'], ['Soong', '50', '60', '90'], ['Sunyoung', '80', '70', '100'], ['Taewhan', '50', '60', '90'], ['Wonseob', '70', '70', '90'], ['nsj', '80', '80', '80']]
# [['Donghyuk', '80', '60', '100'], ['Haebin', '50', '60', '100'], ['Junkyu', '50', '60', '100'], ['Kangsoo', '60', '80', '100'], ['Sunyoung', '80', '70', '100'], ['Soong', '50', '60', '90'], ['Taewhan', '50', '60', '90'], ['Wonseob', '70', '70', '90'], ['Sanghyun', '70', '70', '80'], ['nsj', '80', '80', '80'], ['Sei', '70', '70', '70'], ['Sangkeun', '80', '60', '50']]
# [['Donghyuk', '80', '60', '100'], ['Haebin', '50', '60', '100'], ['Junkyu', '50', '60', '100'], ['Soong', '50', '60', '90'], ['Taewhan', '50', '60', '90'], ['Sangkeun', '80', '60', '50'], ['Sunyoung', '80', '70', '100'], ['Wonseob', '70', '70', '90'], ['Sanghyun', '70', '70', '80'], ['Sei', '70', '70', '70'], ['Kangsoo', '60', '80', '100'], ['nsj', '80', '80', '80']]
# [['Donghyuk', '80', '60', '100'], ['Sangkeun', '80', '60', '50'], ['Sunyoung', '80', '70', '100'], ['nsj', '80', '80', '80'], ['Wonseob', '70', '70', '90'], ['Sanghyun', '70', '70', '80'], ['Sei', '70', '70', '70'], ['Kangsoo', '60', '80', '100'], ['Haebin', '50', '60', '100'], ['Junkyu', '50', '60', '100'], ['Soong', '50', '60', '90'], ['Taewhan', '50', '60', '90']]
# Donghyuk
# Sangkeun
# Sunyoung
# nsj
# Wonseob
# Sanghyun
# Sei
# Kangsoo
# Haebin
# Junkyu
# Soong
# Taewhan
'공부하기 > 백준' 카테고리의 다른 글
[Python] 백준 풀기 1026 - 보물 (0) | 2022.12.05 |
---|---|
[Python] 백준 풀기 2167 - 2차원 배열의 합 (0) | 2022.12.04 |
[Python] 백준 풀기 1476 - 날짜 계산 (0) | 2022.12.01 |
[Python] 백준 풀기 4963 - 섬의 개수 (0) | 2022.11.30 |
[Python] 백준 풀기 7576 - 토마토 (0) | 2022.11.29 |