알고리즘 150

백준 11399: ATM (Python)

https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net n = int(input()) p = list(map(int, input().split())) p.sort() res = 0 for i in range(n): res += sum(p[:i+1]) print(res) 시간을 가장 적게 걸리는 순으로 정렬한 후 각 합을 구하면 된다!

알고리즘/백준 2021.09.25

그리디 알고리즘 (Greedy Algorithm)

그리디 알고리즘(탐욕법): 현재 상황에서 지금 당장 좋은 것만 고르는 방법 - 그리디 알고리즘 문제에서는 문제 풀이를 위한 최소한의 아이디어를 떠올리고 이것이 정당한지 검토할 수 있어야 한다. ex) 거스름돈 문제 - 가장 큰 화폐 단위부터 돈을 거슬러 줌 ㄴ 가지고 있는 동전 중에서 큰 단위가 항상 작은 단위의 배수이므로 작은 단위들을 종합해 다른 해가 나올 수 없다! n = int(input()) cnt = 0 coin = [500, 100, 50, 10] for i in coin:# 시간 복잡도 O(K)

알고리즘/정리 2021.09.23

백준 18870: 좌표 압축 (Python)

https://www.acmicpc.net/problem/18870 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌 www.acmicpc.net import sys n = int(sys.stdin.readline()) num = list(map(int, sys.stdin.readline().split())) num_set = sorted(list(set(num))) for i in num: print(num_set.index(i), end=' ') 숫자를 num으로 입력받아 리스트로 만들고..

알고리즘/백준 2021.09.15

백준 10814: 나이순 정렬 (Python)

https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net import sys n = int(sys.stdin.readline()) mem = [] for i in range(n): age, name = sys.stdin.readline().split() mem.append([int(age),i, name]) mem.sort() for i in range(n): print(mem[i][0], mem[i][2]) 나이, 이름을 입력받아서 리스트에 넣어서 정렬했다..

알고리즘/백준 2021.09.15

백준 1181: 단어 정렬 (Python)

https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net import sys n = int(sys.stdin.readline()) word = [] for i in range(n): word.append(sys.stdin.readline().rstrip()) word = list(set(word)) # 중복 제거 word.sort() # 알파벳 순서대로 정렬 word.sort(key = len) # 길이 순서대로 정렬 for i in word..

알고리즘/백준 2021.09.14

백준 11651: 좌표 정렬하기 2 (Python)

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 import sys n = int(sys.stdin.readline()) num = [] for i in range(n): x, y = map(int, sys.stdin.readline().split()) num.append([y, x]) num.sort() for i in range(n): print(num[i][1], num[i][0])

알고리즘/백준 2021.09.13

백준 11650: 좌표 정렬하기 (Python)

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 import sys n = int(sys.stdin.readline()) num = [] for i in range(n): x, y = map(int, sys.stdin.readline().split()) num.append([x, y]) num.sort() for i in range(n): print(num[i][0], num[i][1])

알고리즘/백준 2021.09.13

백준 2108: 통계학 (Python)

https://www.acmicpc.net/problem/2108 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net from collections import Counter import sys n = int(sys.stdin.readline()) num = [] for i in range(n): num.append(int(sys.stdin.readline())) print(round(sum(num)/n)) num.sort() print(num[n//2]) counter = Counter(num).most_common() if..

알고리즘/백준 2021.09.13