BOJ(정렬)5문제

목차

  1. 좌표 정렬하기(1) 11650
  2. 좌표 정렬하기(2) 11651
  3. 국영수 10825
  4. 나이순 정렬 10814
  5. 시리얼 번호

1. 11650 좌표 정렬하기

N = int(input())
arr = []
for i in range(N):
    a, b = map(int, input().split())
    arr.append((a, b))
for a, b in sorted(arr):
    print(a, b)

2. 11651 좌표 정렬하기(2)

  • 정렬 기준을 두고 싶다면, key 값에 lambda를 넣고, 그 안에서 정렬을 원하는 순서대로 튜플을 넣어준다.
N = int(input())
arr = []
for i in range(N):
    a, b = map(int, input().split())
    arr.append((a, b))
for a, b in sorted(arr, key=lambda x: (x[1], x[0])):
    print(a, b)

3. 10825 국영수

  • 정렬에서 key 값의 lambda로 튜플 안에 음수인 값을 줌으로써 내림차순으로도 정렬이 가능하다.
N = int(input())
arr = []
for i in range(N):
    a, b, c, d = input().split()
    arr.append((a, int(b), int(c), int(d)))
for a in sorted(arr, key=lambda x: (-x[1], x[2], -x[3], x[0])):
    print(a[0])

4. 10814 나이순 정렬

N = int(input())
arr = []
for i in range(N):
    a, b = input().split()
    arr.append((int(a), b))
for a, b in sorted(arr, key=lambda x: x[0]):
    print(a, b)

5. 시리얼 번호

  • 정렬 심화 문제다.
  • 이 방법이 떠오르지 않아서 고민을 많이했다.
  • 분명히 어렵게 가지 않는 방법이 있다는건 직관적으로 알겠는데, 생각하기가 싫은 딱 그런 느낌이었다.
  • sort함수는 오름 차순이 기본이며, 안에 키값에 정렬 기준을 넣을 수 있단 걸 잊지말자.
import sys
def input(): return sys.stdin.readline().rstrip()
n = int(input())
srl = [input() for i in range(n)]
srl.sort()  # 3번째 정렬
srl.sort(key=lambda x: sum(int(c) for c in x if c.isdigit()))  # 2번째 정렬
srl.sort(key=lambda x: len(x))  # 첫 번째, 길이순으로 비교
for s in srl:
    print(s)

참고자료 참고블로그 python숫자판별함수(isdigit(),isnumeric(),isdecimal())

0%