[이것이 코딩 테스트다 with Python] Chapter 14. 정렬 - 국영수

2024. 1. 5. 15:01·코딩테스트/이것이 코딩 테스트다
반응형

< 국영수 >

 

💬 문제 설명

도현이네 반 학생 N명의 이름과 국어, 영어, 수학 점수가 주어진다. 이때, 다음과 같은 조건으로 학생의 성적을 정렬하는 프로그램을 작성하시오.

1. 국어 점수가 감소하는 순서로

2. 국어 점수가 같으면 영어 점수가 증가하는 순서로

3. 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로

4. 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.)

....

 

  입   출력
  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
  Donghyuk
  Sangkeun
  Sunyoung
  nsj
  Wonseob
  Sanghyun
  Sei
  Kangsoo
  Haebin
  Junkyu
  Soong
  Taewhan

💬 입력 조건

  • 첫째 줄에 도현이네 반 학생 수 N ( 1 ≤ N ≤ 100,000 ) 
  • 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수
  • 점수 ( 1 ≤ 각 점수 ≤ 100 )
  • 학생이름  ( 이름 길이 ≤ 10 )

💬 출력 조건

  • 문제에 주어진 정렬 기준으로 정렬한 후 첫째 줄부터 N개의 줄에 걸쳐 각 학생의 이름 출력

✍ 문제요약

국어 점수에 대해 내림차순, 영어 점수에 대해 오름차순 , 수학 점수에 대해 내림차순, 이름에 대해 오름차순을 하면 된다. 

💯 문제링크

백준10825문제와 동일하다.

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

 

10825번: 국영수

첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1

www.acmicpc.net


✅  문제 풀이

  • lambda를 활용해서 주어진 조건대로 정렬해주었다.
    • - x[1] : 국어 내림차순 
    • x[2] : 영어 오름차순
    • - x[3] : 수학 내림차순
    • x[0] : 이름 오름차순 
import sys
input = sys.stdin.readline

N = int(input())
arr = [tuple(input().split()) for _ in range(N)]
for name,_,_,_ in sorted(arr,key = lambda x: (-int(x[1]),int(x[2]),-int(x[3]),x[0])):
    print(name)

✅  타인의 풀이

  • 입력을 받을 때 내림차순 해야할 항목에 대하여 - 를 미리 해주었다.
  • sort()만으로 조건에 맞게 정렬이 이루어졌다.
import sys
input = sys.stdin.readline

result = []
for _ in range(int(input())):
    name, guk, yeong, su = input().split()
    result.append((-int(guk), int(yeong), -int(su), name))

result.sort()
for i in result:
    print(i[3])

반응형

'코딩테스트 > 이것이 코딩 테스트다' 카테고리의 다른 글

[이것이 코딩 테스트다 with Python] Chapter 14. 정렬 - 실패율  (0) 2024.01.08
[이것이 코딩 테스트다 with Python] Chapter 14. 정렬 - 안테나  (0) 2024.01.06
[이것이 코딩 테스트다 with Python] Chapter 13. DFS/BFS - 블록 이동하기  (0) 2024.01.04
[이것이 코딩 테스트다 with Python] Chapter 13. DFS/BFS - 감시 피하기  (2) 2023.12.28
[이것이 코딩 테스트다 with Python] Chapter 13. DFS/BFS - 연산자 끼워 넣기  (0) 2023.12.27
'코딩테스트/이것이 코딩 테스트다' 카테고리의 다른 글
  • [이것이 코딩 테스트다 with Python] Chapter 14. 정렬 - 실패율
  • [이것이 코딩 테스트다 with Python] Chapter 14. 정렬 - 안테나
  • [이것이 코딩 테스트다 with Python] Chapter 13. DFS/BFS - 블록 이동하기
  • [이것이 코딩 테스트다 with Python] Chapter 13. DFS/BFS - 감시 피하기
hyo_nu
hyo_nu
Annoying Orange Developer
  • hyo_nu
    AOD
    hyo_nu
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 코딩테스트
        • 이것이 코딩 테스트다
        • 알고리즘
      • Style Sheet
        • CSS
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • Github
    • Velog
  • 공지사항

  • 인기 글

  • 태그

    dfs
    이것이 취업을 위한 코딩테스트다
    이진탐색
    코딩
    그리디
    코딩테스트다
    dp
    정렬
    python
    취업
    Algorithm
    브루트포스
    알고리즘
    그리기
    코딩테스트
    BFS
    구현
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
hyo_nu
[이것이 코딩 테스트다 with Python] Chapter 14. 정렬 - 국영수
상단으로

티스토리툴바