정렬

    [백준 10814번-파이썬/Python] 나이순 정렬

    http://acmicpc.net/problem/10814 {코드} data = [] for _ in range(int(input())): x, y = input().split() data.append((int(x), y)) data.sort(key=lambda x: x[0]) [print(*i) for i in data] {설명} 파이썬의 정렬은 가능한 한 기존의 인덱스를 유지하는 정렬, 안정된 정렬(Stable sort)을 수행합니다. 그렇기에 단순히 나이만 키값으로 주고 정렬하면 문제가 요구하는 답을 구할 수 있습니다.

    [백준 1181번-파이썬/Python] 단어 정렬

    http://acmicpc.net/problem/1181 {코드} import sys def input(): return sys.stdin.readline().rstrip() def print(val): sys.stdout.write(str(val)+'\n') data = sorted({input() for _ in range(int(input()))}, key=lambda s: (len(s), s)) [print(i) for i in data] {설명} 먼저 입력받은 원소들을 집합에 넣어 중복을 없애고 문자열의 길이을 기준으로 먼저 정렬하고 길이가 같으면 문자열을 기준으로 정렬하게 된다.

    [백준 11651번-파이썬/Python] 좌표 정렬하기 2

    http://acmicpc.net/problem/11651 {코드} import sys def input(): return sys.stdin.readline() def print(a, b): sys.stdout.write(f'{a} {b}\n') [print(*i) for i in sorted([list(map(int, input().split())) for _ in range(int(input()))], key=lambda x: (x[1], x[0]))] {설명} 이 문제는 11651의 좌표 정렬하기와 비슷한 문제로 입력량이 많아 sys모듈을 사용하고 뒤에 key를 통해 2번째 숫자를 기준으로 정렬하되 같은 값이 있다면 첫 번째 값이 더 작은 순으로 정렬한다.

    [백준 11650번-파이썬/Python] 좌표 정렬하기

    http://acmicpc.net/problem/11650 {코드} import sys [print(*x) for x in sorted([list(map(int, sys.stdin.readline().split())) for _ in range(int(sys.stdin.readline()))])] # --- # data = sorted([list(map(int, sys.stdin.readline().split())) for _ in range(int(sys.stdin.readline()))])] [print(*x) for x in data] {설명} 파이썬은 정렬할 때 다차원 배열의 경우 첫 번째 값부터 N번째 값까지 순차적으로 정렬합니다. 즉, 좌표와 같은 정렬에는 그냥 sorted만 사용하면 됩니다...

    [백준 1427번-파이썬/Python] 소트인사이드

    http://acmicpc.net/problem/1427 {코드} print(''.join(map(str, sorted(map(int, input()), reverse=True)))) # --- # sorted_string = sorted(map(int, input())) answer = ''.join(map(str, sorted_string)) print(answer) {설명} 주어진 문자열을 정수로 바꾸어 정렬한 다음 다시 문자열로 바꾼 다음 하나의 문자열로 합쳐 출력한다.

    [백준 2108번-파이썬/Python] 통계학

    http://acmicpc.net/problem/2108 {코드} import sys from collections import Counter def input(): return int(sys.stdin.readline()) def print(v): sys.stdout.write(str(v)+'\n') n = input() data = sorted([input() for _ in range(n)]) print(round(sum(data) / n)) # 평균 print(data[n // 2]) # 중앙값 # 최빈값 count = Counter(data).most_common() if len(count) > 1 and count[0][1] == count[1][1]: print(count[1][0]) els..

    [백준 10989번-파이썬/Python] 수 정렬하기 3

    http://acmicpc.net/problem/10989 {코드} import sys def input(): return int(sys.stdin.readline()) def print(v): sys.stdout.write(str(v)+'\n') data = [0]*10001 for _ in range(input()): data[input()] += 1 for i in range(1, 10001): if data[i]: for _ in range(data[i]): print(i) {설명} 이 문제는 주어지는 수의 개수가 너무 많기 때문에 O(nlogn)으로도 시간 초과가 나게 됩니다. 그러나 수의 범위가 1에서 10000이므로 계수 정렬을 사용할 수 있습니다. 계수 정렬은 범위가 양의 정수일때 최댓값까..

    [백준 2751번-파이썬/Python] 수 정렬하기 2

    http://acmicpc.net/problem/2751 {코드} import sys [sys.stdout.write(str(v)+'\n') for v in sorted([int(sys.stdin.readline()) for _ in range(int(sys.stdin.readline()))])] {설명} 이 문제는 O(nlogn)의 복잡도를 요구하기 때문에 파이썬의 기본 내장 정렬 함수를 사용할 수 있습니다. 다만, 입력 횟수가 많고 숫자의 길이도 짧지 않아 sys 라이브러리의 입출력을 사용하면 Python3로 통과할 수 있습니다. {코드} import sys def input(): return int(sys.stdin.readline()) def print(v): sys.stdout.write(str..

    [백준 2750번-파이썬/Python] 수 정렬하기

    http://acmicpc.net/problem/2750 {코드} data = [int(input()) for _ in range(int(input()))] for i in range(len(data)): for j in range(len(data)-i-1): if data[j] > data[j+1]: data[j], data[j+1] = data[j+1], data[j] [print(v) for v in data] {설명} 버블 정렬의 코드로 0번째부터 n-1번째까지 n번 돌며 바로 오른쪽에 있는 값과 비교해 더 큰 값을 뒤로 옮깁니다. *코딩하는 거니님의 버블 소트 영상을 참고하세요! {코드} data = [int(input()) for _ in range(int(input()))] for i in ..