분류 전체보기 219

[Baekjoon/Python] 2108번: 통계학 - 효과는 굉장했다!

2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 알고리즘 분류 구현 정렬 SOLUTION import sys from collections import Counter num = [int(sys.stdin.readline()) for _ in range(int(sys.stdin.readline()))] tmp = {} num.sort() print(round(sum(num)/len(num))) # 산술평균 소수점 이하 첫째 자리에서 반올림한 값 round()함수를 이용 print(num[len(num)//2]) # 중앙값 t..

[Baekjoon/Python] 1978번: 소수 찾기 - 효과는 굉장했다!

1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 알고리즘 분류 수학 정수론 소수 판정 에라토스테네스의 체 SOLUTION import sys N = int(sys.stdin.readline()) num_list = list(map(int, sys.stdin.readline().split())) answer = 0 for num in num_list: cnt = 0 if num == 1: # 1은 소수가 아니므로 패스 continue for i in range(2,num): # 소수 : 약수가 1과 자기 자신 밖에 없는 수 if num % i == 0: # num이 i로 나누어진..

[Baekjoon/Python] 1920번: 수 찾기 - 효과는 굉장했다!

1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net 알고리즘 분류 이분 탐색 SOLUTION import sys N = int(sys.stdin.readline()) N_list = list(map(int, sys.stdin.readline().split())) M = int(sys.stdin.readline()) M_list = list(map(int, sys.stdin.readline().split())) N_list.sort() for i in M_list: ..

[Baekjoon/Python] 11651번: 좌표 정렬하기2 - 효과는 굉장했다!

11651번: 좌표 정렬하기 2 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 알고리즘 분류 정렬 SOLUTION import sys N = int(sys.stdin.readline()) coordinates= [] for _ in range(N): x, y = map(int, sys.stdin.readline().split()) coordinates.append([y,x]) # y좌표가 증가하는 순서가 먼저이므로 [y,x]를 append함 coordinates.sort() # sor..

[Baekjoon/Python] 11650번: 좌표 정렬하기 - 효과는 굉장했다!

11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 알고리즘 분류 정렬 SOLUTION import sys N = int(sys.stdin.readline()) coordinates = [] for _ in range(N): x, y = map(int, sys.stdin.readline().split()) coordinates.append([x,y]) coordinates.sort() # x, y 좌표에 대해 오름차순으로 정렬 for x, y in coordin..

[Baekjoon/Python] 10989번: 수 정렬하기3 - 효과는 굉장했다!

10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. www.acmicpc.net 알고리즘 분류 정렬 SOLUTION import sys N = int(sys.stdin.readline()) tmp = [0]*10001 # 조건: 수는 10000보다 작거나 같은 자연수, 10001개를 만드는이유? list의 인덱스는 0번 부터 시작하므로 for _ in range(N): tmp[int(sys.stdin.readline())] += 1 # 입력받은 수의 빈도 수를 1회 증가시킨다 for i in range(10001): if tmp[i] != 0: for j in ..

[Baekjoon/Python] 7568번: 덩치 - 효과는 굉장했다!

7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net 알고리즘 분류 구현 브루트포스 알고리즘 SOLUTION import sys people = [] for person in range(int(sys.stdin.readline())): x,y = map(int, input().split()) people.append([x,y]) # 첫 사람부터 한 명씩 차례대로 다른사람이랑 비교 for p1 in people: rank = 1 for p2 in people: if p1[0] < p2[0] and p1[..

[Baekjoon/Python] 2751번: 수 정렬하기2 - 효과는 굉장했다!

2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 알고리즘 분류 정렬 SOLUTION import sys N = int(input()) list = [] for _ in range(N): list.append(int(sys.stdin.readline())) list.sort() # 오름차순 정렬 for i in range(len(list)): print(list[i])

[Baekjoon/Python] 2609번: 최대공약수와 최소공배수 - 효과는 굉장했다!

2609번: 최대공약수와 최소공배수 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. www.acmicpc.net 알고리즘 분류 수학 정수론 유클리드 호제법 SOLUTION a, b = map(int, input().split()) def gcd(x,y): # 최대공약수(유클리드 호재법) mod = x % y while mod > 0: x = y y = mod mod = x % y return y def lcm(x, y): # 최소공배수 return x * y // gcd(x,y) # 두 수를 곱하고 최대공약수로 나눈 값 == 최소공배수 print(gcd(a, b)) print(lcm(a, b)) ※ 유클리드 호재법이란? https://na..

[Baekjoon/Python] 1181번: 단어 정렬 - 효과는 굉장했다!

1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 알고리즘 분류 정렬 SOLUTION import sys words_list = set() #중복된 단어는 삭제하기 위해 set으로 할당 for _ in range(int(sys.stdin.readline())): words_list.add(sys.stdin.readline().rstrip()) # set은 list와 다르게 append() 함수 대신 add() 함수 사용, rstrip을 통해 문자열 뒤 \n 붙는 것 방지 words_list = lis..