목록백준 (26)
나의 개발일지

문제 : https://www.acmicpc.net/problem/1541🔑 더하기 먼저더하기 먼저 모두 하고 나서 빼기를 진행'-'를 기준으로 split을 한다.55-50+40 → ['55', '50+40']요소가 숫자로만 구성된 문자열이면 정수로 형변환요소에 '+'가 있으면 '+'를 기준으로 split을 하고 더함 → [55, 90] 만들어진 리스트 요소들을 전부 빼면 정답 ✨ n = input()s = n.split('-')for i in range(len(s)): if '+' in s[i]: tmp = map(int, s[i].split('+')) s[i] = sum(tmp) else: s[i] = int(s[i]) answer = s[0]f..

문제 : https://www.acmicpc.net/problem/16496 🔑 숫자를 모두 10자리로 맞추기 3 = 3333333333 30 = 3030303030 34 = 3434343434 5 = 5555555555 9 = 9999999999 정렬하면 9999999999, 5555555555, 3434343434, 3333333333, 3030303030 이렇게 10자리로 맞추고 내림차순 정렬을 한 후 원래 숫자들을 출력하면 끝 ✨ n = int(input()) nums = input().split() sort_list = [] for n in nums: new_num = n * 10 # 문자열 10번 반복해서 최소 10자리 이상으로 만들기 sort_list.append((int(new_num[:1..

문제 : https://www.acmicpc.net/problem/1436 🔑 in 연산자 숫자를 666부터 시작 숫자에 666이 들어있는지 확인 str()로 형변환 후 in 연산자 적용 666이 들어간 숫자 n개를 찾을 때까지 숫자를 1씩 증가시키면서 반복 n = int(input()) title = 666 cnt = 0 while cnt != n: if '666' in str(title): cnt += 1 title += 1 print(title-1)

문제 : https://www.acmicpc.net/problem/28283 🔑 BFS 보안 시스템이 설치되는 컴퓨터로부터 탐색을 시작한다. 각 컴퓨터까지의 깊이를 방문 배열에 저장한다. 보안 시스템이 각 컴퓨터로 뻗어 나가는 순서 탐색 종료 후, 방문 안 했고 이 컴퓨터에서 훔칠 수 있는 돈이 있는 경우는 -1을 출력 (무한히 훔칠 수 있음) 위 조건에 해당하지 않으면 깊이가 저장된 방문배열에 각 컴퓨터마다 (깊이 * 이 컴퓨터에서 훔칠 수 있는 돈) 계산을 한다. 내림차순으로 정렬해서 가장 많은 돈을 훔친 x개의 합을 구한다. 끝 ✨ from collections import defaultdict, deque import sys input = sys.stdin.readline n, m, x, y = ..

문제 : https://www.acmicpc.net/problem/13975 🔑 우선순위 큐, 최소 힙 파일의 크기가 가장 작은 두 개를 골라서 하나의 파일로 합친다. 이 과정을 위해 힙을 사용 이때 드는 비용을 더한다. 합쳐진 파일을 다시 힙에 넣는다. 힙에 들어있는 파일이 1개가 될 때까지 반복하면 끝 ✨ from heapq import heappush, heappop, heapify import sys input = sys.stdin.readline t = int(input()) for _ in range(t): k = int(input()) file = list(map(int, input().split())) heapify(file) answer = 0 while len(file) >= 2: x ..

문제 : https://www.acmicpc.net/problem/17503 🔑 이분 탐색 맥주 종류를 선호도 기준으로 내림차순 정렬 mid값 (간 레벨)을 기준으로 정해진 개수만큼 맥주를 마시고 선호도를 채울 수 있는지를 확인 만족한다면 mid값을 계속 낮춰보고 최솟값을 찾으면 끝 ✨ import sys input = sys.stdin.readline n, m, k = map(int, input().split()) bear = [list(map(int, input().split())) for _ in range(k)] bear.sort(reverse=True) l = 0 r = 2**31 while l = level: # 간 레벨 >= 도수 sum_p += p drink += 1 if drink == ..

문제 : https://www.acmicpc.net/problem/16954 🔑 BFS 먼저 벽이 내려온 상태를 모두 만들었다. (8 개 이후는 벽이 모두 사라지기 때문에 8 개까지) 이전 맵 상태를 가져와서 벽을 내리는데 이때 리스트가 얕은 복사가 되지 않게 주의 그리고 이동 방향은 제자리, 상하좌우, 대각선 총 9개의 방향 제자리 위치하는 방향(i = 0) 일 때도 큐에 넣을 수 있게 방문 처리를 해제했다. 이것 때문에 79% 에서 막혔다가 위 조건 추가로 문제 해결 현재 깊이에 맞는 벽 상태를 보고 갈 수 있는지 확인 (현재 깊이) 갔다면 벽이 내려오고 나서 벽에 안 부딪히는지 확인 (현재 깊이 + 1) 두 조건 만족하면 큐에 추가 도착지에 도착했거나 깊이가 8 이상이 되면 정답 처리하고 끝 ✨ f..

문제 : https://www.acmicpc.net/problem/1238 🔑 다익스트라 각 마을에서 도착지까지의 거리를 저장 [INF, 1, 0, 3, 7] 도착지에서 각 마을까지의 거리를 저장 [ 0, 4, 0, 6, 3] 그래서 총 n번의 다익스트라를 진행 0번 인덱스 제외 각 인덱스의 합이 가장 큰 거리가 정답 from collections import defaultdict from heapq import heappush, heappop n, m, x = map(int, input().split()) # n명 학생(마을), m개의 단방향 도로, x도착지 graph = defaultdict(list) for i in range(m): s, e, t = map(int, input().split()) ..