데이터 코딩랩
백준 10814 파이썬 나이순 정렬 본문
https://www.acmicpc.net/problem/10814
📄 실전 문제 접근 체크리스트
3초, 256MB
1단계: 문제 파악
☑️ 문제 요구사항 한 줄로 정리
: 나이와 이름, 나이가 증가하는 순, 나이가 같으면 먼저 가입한 사람 순으로 정렬
☑️ 예제 입력/출력 확인
: 입력 → 첫 째줄 : 회원수 N (N<=100,000 십만) , 둘째줄~N번째 줄: 나이 이름 공백으로 구분되어 주어짐, 1<= 나이 <=200 , 1<=이름<=100
가입순서는 입력순
: 출력 → 나이 이름
추가)
2단계: 입력 범위 → 시간복잡도 판단
입력 크기 (N) 적정 알고리즘 복잡도
☑️ 입력 크기 체크 후 -> 내가 쓸 수 있는 알고리즘 선별
→ 주어질 숫자 N (N<=1,000,000,000 십억)
→ 정렬 알고리즘 O(N log N)
→ N은 최대 100,000자리 → 문자 10개
→ 1<= 나이 <=200 , 1<=이름<=100
추가)
입력량이 크므로 sys.stdin.readline() 사용 추천
import sys
input = sys.stdin.readline
3단계: 알고리즘 유형 선택
☑️ 정렬
추가)
✔️ 정렬 (기준 1: 나이 오름차순, 기준 2: 입력 순서 유지 → stable sort)
✔️ key=lambda x: int(x[0]) → 나이 기준 정렬만 해주면 됨
📌 이름은 정렬 기준에 포함 ❌
파이썬 정렬이 stable이기 때문에 따로 순서 index 저장 안 해도 OK
4단계: 자료구조 & 흐름 정리
☑️ 어떤 자료구조를 쓸까?
→ 정렬
☑️ 함수 나눌 필요 있는가?
→ 없음
☑️ 조건 분기 많을까? 시뮬레이션 필요한가?
→ 없음
☑️ 흐름 : input, 내림차순 정렬, 출력
추가)
입력 저장: [(나이, 이름), (나이, 이름), ...]
정렬 기준: 나이 (key=lambda x: int(x[0]))
출력: print(나이, 이름)
✔️ 리스트로 저장 → 정렬 → 출력 순
5단계: 구현 전 체크
☑️ 입출력 방식은?
→ 입력 받을때 한 줄씩 받고, 출력도 한 줄씩
☑️ 예외 상황은 어떤 게 있을까? (빈 입력, 중복 등)
→ 수가 중복되어도 정렬에는 영향이 없는가?
☑️ 시간 초과 가능성은?
→ 없는듯
추가)
예외 없음 (입력은 항상 1개 이상 숫자)
중복 숫자도 문제 없음 → 단순 정렬이니까!
시간초과/메모리초과 절대 없음
6단계: 제출 전 체크리스트
☑️ 예제 출력 전부 통과했는가?
☑️ 문제 조건 중 빠뜨린 거 없는가?
☑️ 반복문/조건문 이상한 부분 없는가?
☑️ 시간/메모리 초과 가능성 없나?
추가)
✔️
✔️
✔️
내 코드
T=int(input())
X=[]
for i in range(T):
a = input().split()
a[0] = int(a[0])
X.append(a)
#print(X)
member = sorted(X, key=lambda x:(x[0]))
#print(member)
for m in member:
print(*m)
최적화 된 답
T = int(input())
X = [input().split() for _ in range(T)]
X = [[int(age), name] for age, name in X]
X.sort(key=lambda x: x[0])
for m in X:
print(*m)
'Algorithm > 백준' 카테고리의 다른 글
백준 10825 파이썬 국영수 (enumerate, index 출력방식) (0) | 2025.04.17 |
---|---|
백준 1181 파이썬 단어 정렬 (0) | 2025.04.17 |
백준 1427 파이썬 소트인사이드 (0) | 2025.04.16 |
백준 2750 파이썬 수 정렬하기 (0) | 2025.04.16 |
백준 2908 파이썬 상수 _ join, reversed 추가 이론 (0) | 2025.04.16 |