반응형

Algorithm/백준 51

[백준/Python] 시리얼 번호

https://www.acmicpc.net/problem/1431 1431번: 시리얼 번호 첫째 줄에 기타의 개수 N이 주어진다. N은 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어 www.acmicpc.net n = int(input()) serial = [input() for _ in range(n)] # 숫자 합 구하는 메서드 def s_num(x): result = [int(n) for n in x if n.isdigit()] return sum(result) serial.sort(key=lambda x : (len(x), s_num(x), x)) # 길이 -> 숫자 합 -> 사전 순으로 정..

Algorithm/백준 2021.10.31

[백준/Python] 절대값 힙

https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net import heapq, sys n = int(sys.stdin.readline()) heap = [] for _ in range(n): x = int(sys.stdin.readline()) if x == 0: # 절대값이 가장 작은 값 출력 if len(heap) == 0: print(0) else: print(heapq.heappop(heap)[1]) else: # 힙에 ..

Algorithm/백준 2021.10.23

[백준/Python] 카드

https://www.acmicpc.net/problem/11652 11652번: 카드 준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지 www.acmicpc.net [ 처음 코드 - 시간 초과 ] n = int(input()) cards = [int(input()) for _ in range(n)] print(max(cards, key = cards.count)) [ 최종 코드 ] 시간 초과가 나서 찾아보니 딕셔너리를 쓰면 시간 초과가 해결된다고 해서 딕셔너리를 사용한 코드로 바꾸었다! 딕셔너리로 해도 시간초과가 난다면 PyPy3 로 해보면 통과될 것이..

Algorithm/백준 2021.10.13

[백준/Python] 요세푸스 문제 0

https://www.acmicpc.net/problem/11866 11866번: 요세푸스 문제 0 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000) www.acmicpc.net n, k = map(int, input().split()) people = [i for i in range(1, n+1)] idx = 0 # 제거해야 할 위치 delete = [] # 제거할 순서를 담은 리스트 while people: idx = (idx + k - 1) % len(people) # 제거할 위치 구하기 delete.append(people.pop(idx)) print('') 1. idx는 리스트에서 제거해야 할 위치를 담고 있는 변수이고, delete는 제거해야 할..

Algorithm/백준 2021.10.10

[백준/Python] 후위 표기식2

https://www.acmicpc.net/problem/1935 1935번: 후위 표기식2 첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이 www.acmicpc.net n = int(input()) postfix = input() nums = [int(input()) for _ in range(n)] stack = [] # 후위 표기식 계산 for p in postfix: if 'A'

Algorithm/백준 2021.10.07

[백준/Python] 괄호

https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net [ 처음 코드 ] 처음엔 괄호 개수를 세는 것으로 코드를 짰었다. 하지만 ')(' 같은 반례 때문에 결과는 틀렸다고 나왔다....ㅜ n = int(input()) for _ in range(n): arr = list(input()) count = 0 while arr: now = arr.pop() if now == '(': count += 1 elif now == '..

Algorithm/백준 2021.10.06

[백준/Python] 듣보잡

https://www.acmicpc.net/problem/1764 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net [ 처음 코드 ] - 시간 초과 n, m = map(int, input().split()) not_listen = [input() for _ in range(n)] not_look = [input() for _ in range(m)] # 듣보잡 구한 후 사전 순으로 정렬 result = [i for i in not_listen if i in not_look] result.sort() print(..

Algorithm/백준 2021.10.06

[백준/Python] 숨바꼭질 6

https://www.acmicpc.net/problem/17087 17087번: 숨바꼭질 6 수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A1, A2, ..., AN에 있다. 수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이 www.acmicpc.net n, S = map(int, input().split()) pos = list(map(int, input().split())) dif = list(set(abs(p - S) for p in pos)) # 수빈이와 동생들의 위치 차이 리스트 D = min(dif) # 최대공약수 구하는 메서드 def gcd(a, b): res = 0 while b: res = a % ..

Algorithm/백준 2021.10.05

[백준/Python] 01타일

https://www.acmicpc.net/problem/1904 1904번: 01타일 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이 www.acmicpc.net n = int(input()) tile = [0, 1, 2] # 만들 수 있는 2진 수열의 개수 length = len(tile) # 크기가 n인 2진 수열의 개수 if n >= length: for i in range(length, n+1): tile.append((tile[i-1] + tile[i-2])% 15746) print(tile[n]) 이 문제는 동적계획법 문제이기 때문에 각 n의 만들 수..

Algorithm/백준 2021.10.03

[백준/Python] 골드바흐의 추측

https://www.acmicpc.net/problem/9020 9020번: 골드바흐의 추측 1보다 큰 자연수 중에서 1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아 www.acmicpc.net n = int(input()) prime = [0, 0] + [1] * 9999 # 소수 리스트 # 에라토스테네스의 체를 이용하여 소수 구하기 for i in range(2, int(10000 ** 0.5)+1): if prime[i]: for j in range(i*2, 10001, i): prime[j] = 0 # 두 소수의 차이가 가장 작은 골드바흐 파티션 구하기 for ..

Algorithm/백준 2021.10.03
반응형