내용으로 건너뛰기
테페리넷
사용자 도구
등록
로그인
사이트 도구
검색
도구
문서 보기
Fold/unfold all
역링크
미디어 관리자
사이트맵
등록
로그인
>
미디어 관리자
사이트맵
현재 위치:
테페리넷
»
Problem Solving
»
문제
»
백준 온라인 저지 (BOJ)
»
나이순 정렬
ps:problems:boj:10814
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== 나이순 정렬 ====== ===== 풀이 ===== * 그냥 시키는대로 정렬해서 출력만 하면 되는 문제. * 원래는 stable 하게 소팅하는 것도 요구하는 문제이지만, 파이썬의 내장 sort함수는 이미 stable하기 때문에 별로 신경쓸 필요가 없다. * 입력받은 라인을, 나이와 이름의 튜플로 변환하고, 그것을 소팅해서 출력해도 되지만, 그냥 라인을 문자열 그대로 저장해서 갖고 있으면서 sort의 key로 문자열에서 나이를 추출하는 함수를 넘겨주는 것이, 문자열을 그대로 갖고 있는 상태로 소팅할수 있으므로 좀더 빠르게 출력할수 있다. * 나이의 범위가 1~200까지밖에 없으므로, 버켓 소트로 처리할수도 있다. 이렇게 하면 O(nlogn)이 아니라 O(n)에 처리할수 있지만, 실제적으로 속도 향상이 크지는 않았다. (내장정렬: 164ms, 버켓 소트: 148ms) ===== 코드 ===== ==== 코드 1 - 내장 정렬 ==== <dkpr py> """Solution code for "BOJ 10814. 나이순 정렬". - Problem link: https://www.acmicpc.net/problem/10814 - Solution link: http://www.teferi.net/ps/problems/boj/10814 """ import sys def main(): N = int(sys.stdin.readline()) lines = [sys.stdin.readline() for _ in range(N)] print(''.join(sorted(lines, key=lambda x: int(x.split()[0])))) if __name__ == '__main__': main() </dkpr> ==== 코드 2 - 버켓 정렬 ==== <dkpr py> """Solution code for "BOJ 10814. 나이순 정렬". - Problem link: https://www.acmicpc.net/problem/10814 - Solution link: http://www.teferi.net/ps/problems/boj/10814 """ import sys MAX_AGE = 200 def main(): N = int(sys.stdin.readline()) buckets = [[] for _ in range(MAX_AGE + 1)] for _ in range(N): line = sys.stdin.readline() buckets[int(line.split()[0])].append(line) print(''.join(''.join(bucket) for bucket in buckets)) if __name__ == '__main__': main() </dkpr> {{tag>BOJ ps:problems:boj:실버_5}}
ps/problems/boj/10814.txt
· 마지막으로 수정됨: 2021/08/23 01:03 저자
teferi
문서 도구
문서 보기
역링크
Fold/unfold all
맨 위로