728x90

알고리즘 공부(C++) 83

백준 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...

백준 11279 최대 힙

11279번: 최대 힙 (acmicpc.net) 11279번: 최대 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 www.acmicpc.net import heapq import sys N = int(input()) heap = [] for i in range(N): x = int(sys.stdin.readline()) if x == 0: if not heap: print(0) else: print(heapq.heappop(heap)[1]) else: heapq.heappush(heap, (-x, x)) 힙.이라는 것을 처음 접해보았읍니..

백준 15650 N과 M(2) - 백트래킹문제

15650번: N과 M (2) (acmicpc.net) 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net N과 M문제와 매우 비슷 but 오름차순만 정렬해야된다는 것이 달랐음. N,M = map(int, input().split()) lst = [] visited = [False] * N def dfs(depth): if depth == M: print(' '.join(map(str, lst))) return for i in range(N): if not visited[i]: for j in range(i+1)..

백준 3986 좋은 단어

3986번: 좋은 단어 (acmicpc.net) 3986번: 좋은 단어 이번 계절학기에 심리학 개론을 수강 중인 평석이는 오늘 자정까지 보고서를 제출해야 한다. 보고서 작성이 너무 지루했던 평석이는 노트북에 엎드려서 꾸벅꾸벅 졸다가 제출 마감 1시간 전에 www.acmicpc.net import sys result = 0 N = int(input()) for i in range(N): stack = list(sys.stdin.readline().strip()) temp = [] for j in range(len(stack)): if len(temp) == 0: temp.append(stack[j]) else: if temp[len(temp) - 1] == stack[j]: temp.pop() else: ..

백준 18258 큐2

18258번: 큐 2 (acmicpc.net) 18258번: 큐 2 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net import sys from collections import deque queue = deque([]) N = int(sys.stdin.readline()) for i in range(N): str = sys.stdin.readline() if (str[:4] == 'push'): queue.append(int(str[5:])) elif (str[:3] == "pop"): if (len(qu..

728x90