728x90

분류 전체보기 274

백준 1158 요세푸스 문제 - 큐

1158번: 요세푸스 문제 (acmicpc.net) 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net from collections import deque N, K = map(int, input().split()) lst = [i for i in range(N, 0, -1)] deq = deque(lst) lst2 = [] while len(deq) > 0: for i in range(K - 1): deq.appendleft(deq.pop()) lst2.append(str(deq.pop())) print('') 1 2 3 4 5 6 7 이 동그랗게 앉아있을 때 K가 3이면 +3씩 깡충 뛰기 해서 3 6..

백준 10816 숫자카드 2 - 딕셔너리

10816번: 숫자 카드 2 (acmicpc.net) 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 어떤 숫자들에 상근이의 숫자가 몇번이나 포함되었는가를 구하는 문제였는데 보자마자 딕셔너리로 풀어야겠다! 가 떠올랐다. 하지만 계속 시간초과가 나게 되고.. import sys N = int(input()) lst = list(map(int, sys.stdin.readline().split())) M = int(input()) lst2 = list(map(int, sys.stdi..

백준 1764 듣보잡 - 차집합

1764번: 듣보잡 (acmicpc.net) 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net N, M = map(int, input().split()) a = set() b = set() for i in range(N): a.add(input()) for i in range(M): b.add(input()) c = sorted(list(a.intersection(b))) print(len(c)) print('\n'.join(c)) 간단하지만 알아둘 필요가 있는 문제. 딱 봤을때부터 교집합 구하는 문제였는데 ..

백준 2609 최소공배수 최대공약수

2609번: 최대공약수와 최소공배수 (acmicpc.net) 2609번: 최대공약수와 최소공배수 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. www.acmicpc.net 브론즈인데도 어렵다고 느껴졌던 . ... a, b = map(int, input().split()) tmp = 0 for i in range(min(a,b), 0, -1): if a % i == 0 and b % i == 0: tmp = int(i) break print(tmp) print(tmp * (a // tmp) * (b // tmp)) 아이디어의 키포인트는 우선.. 1.a랑 b중에 더 적은 값을 기준으로 계속 내려가면서 처음으로 두 값에 나머지가 0이 되는 값..

백준 18870 좌표 압축 - 정렬

18870번: 좌표 압축 (acmicpc.net) 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌 www.acmicpc.net N = int(input()) X = list(map(int, input().split())) lst = list(set(X.copy())) lst.sort() x = [] dic = {lst[i]: i for i in range(len(lst))} for i in range(len(X)): x.append(str(dic[X[i]])) print(" ".join(x..

백준 10610 30 그리디

10610번: 30 (acmicpc.net) 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 이 문제서 키포인트 1. '0'이 포함되어 있어야 할것 2. 모든 숫자를 더했을 때 3의 배수여야 할 것 N = list(input()) result = 0 result = sum(int(i) for i in N) if '0' not in N or result % 3 != 0: print(-1) else: N.sort(reverse = True) print("".join(N)) 간단하지만 코드 줄수를 축소하는 방법이 있어..

백준 2606 바이러스 - DFS 그래프 순회

2606번: 바이러스 (acmicpc.net) 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 두 번째 DFS 문제였다.. 저번 DFS와 BFS문제를 잘 이해했어야만 풀 수 있는 문제 N = int(input()) M = int(input()) graph = [[] * N for _ in range(N + 1)] visited = [False] * (N + 1) for i in range(M): a, b = map(int, input().split()) graph[a].append(b) graph[b].append..

백준 1269 대칭 차집합

1269번: 대칭 차집합 (acmicpc.net) 1269번: 대칭 차집합 첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어 www.acmicpc.net a, b = map(int, input().split()) lst_a = set(list(map(int, input().split()))) lst_b = set(list(map(int, input().split()))) print(len(lst_b - lst_a) + len(lst_a - lst_b)) 간단한 문제였는데 두 차집합의 합을 구하면 됐었다. 하지만 시간초과가 떴는데..... 해결책 = 두 배열을..

백준 2075 N번째 큰 수 -heap

2075번: N번째 큰 수 (acmicpc.net) 2075번: N번째 큰 수 첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다. www.acmicpc.net 이것도 우선순위 큐(heap)문제.. 오늘 티어 바꾸려고 문제를 7개를 풀었더니 토할것같다.. 마지막문제. import heapq N = int(input()) heap = [] for i in range(N): a = list(map(int, input().split())) for j in a: heapq.heappush(heap, (-j, j)) for i in range(N): result = heapq.heap..

백준 1715 카드 정렬하기 - 힙

1715번: 카드 정렬하기 (acmicpc.net) 1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net 힙 응용 문제 왜 힙을 사용해야 하느냐? 카드를 최대한 적은 수로 비교해야 하기 때문에 계속 최솟값이 유지되어야 하고 값과 값이 더해졌을때 그 수를 힙에 넣어서 다른 수들과 다시 비교해줘야 함 import sys import heapq N = int(input()) heap = [] result = 0 for i in range(N): heapq.heappush(heap,int(sys.stdin...

728x90