코딩일지/python 백준 알고리즘 81

python 백준 알고리즘 18870번: 좌표 압축

https://www.acmicpc.net/problem/18870 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌 www.acmicpc.net 좌표 압축 - 수의 범위가 매우 큰 상황에서 수의 값과 상관없이 좌표들 사이의 대소만 구별할 때 사용 1. 좌표 압축을 할 배열을 임시의 배열에 중복이 없고(set) 정렬된(sort) 상태로 만들어 둔다. 2. 압축할 배열의 각 수들이 임시 배열의 몇 번째 인덱스에 해당하는 수인지 찾는 것으로 대소를 구별한다. 임시 배열은 정렬된 상태이기 때문에 ..

python 백준 알고리즘 10814번: 나이순 정렬

https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 띄어쓰기를 기점으로 두 정보를 받아서 리스트 형식으로 리스트에 저장 나이순 정렬 (key = lambda x: int(x[0]) 나이[0], 이름[1] 출력 내 제출 import sys n = int(sys.stdin.readline()) member_list = [] for i in range(n): member_list.append(list(sys.stdin.readline().split())) m..

python 백준 알고리즘 1181번: 단어 정렬

https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 중복 제거 - set 자료형 / if (변수) not in: 문자열을 길이순으로 정렬 - sort(key = len) 두 가지만 신경써주면 계속 쓰던거 쓰는 문제. 내 제출 import sys n = int(sys.stdin.readline()) set_list = set() # 중복제거 for i in range(n): set_list.add(sys.stdin.readline().st..

python 백준 알고리즘 11651번: 좌표 정렬하기 2

https://www.acmicpc.net/problem/11651 11651번: 좌표 정렬하기 2 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 11650번과 비슷한 문제이지만 이번에는 기준점이 y점이다. 단순하게 y와 x의 배열을 바꾼것으로 해결 내 제출 import sys n = int(sys.stdin.readline()) array = [] for i in range(n): [x, y] = map(int, sys.stdin.readline().split()) array.app..

python 백준 알고리즘 11650번: 좌표 정렬하기

https://www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 배열 안에 N개만큼 좌표를 저장 정렬 for 반복문으로 배열[i][0] (x좌표) 배열[i][1] (y좌표) 출력 내 제출 import sys n = int(sys.stdin.readline()) array = [] for i in range(n): [x, y] = map(int, sys.stdin.readline().split()) array..

python 백준 알고리즘 1427번: 소트인사이드

https://www.acmicpc.net/problem/1427 1427번: 소트인사이드 첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net N을 string으로 변환해 한 글자씩 분리해서 리스트에 저장해둔다 리스트 내림차순으로 정렬 반복문을 이용해 첫글자부터 출력 내 제출 import sys n = int(sys.stdin.readline()) num_list = [] for i in str(n): num_list.append(int(i)) num_list.sort(reverse = True) for i in num_list: print(i, end = '')

python 백준 알고리즘 2108번: 통계학

https://www.acmicpc.net/problem/2108 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 산술평균 - round(sum(nums) / n) 중앙값 - sort 혹은 sorted 정렬 후, 정중앙 수 nums[int((n - 1) / 2)] ** 최빈값 첫 구상 - 딕셔너리 생성 후 정수들 append 해서 가장 많은 밸류 찾기 구글링을 했더니 collection 모듈의 Counter 함수를 사용해 빈도수를 구하는 방법이 있었다. 출력 조건중 최빈값이 여러 개 있을 때에는 그중 두 번째로 작은 값을 ..

python 백준 알고리즘 25305번: 커트라인

https://www.acmicpc.net/problem/25305 25305번: 커트라인 시험 응시자들 가운데 1등은 100점, 2등은 98점, 3등은 93점이다. 2등까지 상을 받으므로 커트라인은 98점이다. www.acmicpc.net 점수 리스트를 내림차순 정렬해서 k-1번째를 프린트하면 되는 간단한 문제 N, k = map(int,input().split()) scores = list(map(int,input().split())) scores.sort(reverse=True) print(scores[k - 1])

python 백준 알고리즘 10989번: 수 정렬하기 3

https://www.acmicpc.net/problem/10989 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. www.acmicpc.net 카운팅 정렬(Counting Sort, 계수 정렬) - 주어진 배열의 값 범위가 작은 경우 빠른 속도를 갖는 정렬 알고리즘, 최댓값과 입력 배열의 원소 값 개수를 누적합으로 구성한 배열로 정렬을 수행한다. 이번에는 기존방식 사용시 메모리 초과가 뜨게 된다. 공간복잡도를 줄이는 형식으로 풀어야 하는 문제. 내 제출 import sys n = int(sys.stdin.readline()) num_list = [0] * ..

python 백준 알고리즘 2751번: 수 정렬하기 2

https://www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 2750번과 같은 문제지만 N의 범위가 1,000,000으로 굉장히 높아 input으로 받으면 시간초과에 걸리게 된다. 파이썬의 표준 라이브러리인 sys의 sys.stdin.readline()를 이용하여 문제를 해결할 수 있었다. 내 제출 import sys n = int(input()) num_list = [] for _ in range(n): num_list.append(int(sy..