본문 바로가기

분류 전체보기

(116)
파이썬 | 백준 | 17073 | 나무 위의 빗물 solution 더 이상 물이 움직이지 않는 상태가 되었을 때 → 물이 모두 말단 노드에 있을 때 확률 랜덤 → 말단 노드의 개수를 세서 그냥 W로 나눈다. # 17073, 나무 위의 빗물 import sys from collections import deque def bfs(x): global leaf visited[x] = 1 q = deque() q.append(x) while q: n = q.popleft() if len(graph[n]) == 1 and visited[graph[n][0]]:# 말단 노드이면 leaf++ leaf += 1 for i in graph[n]: if not visited[i]: visited[i] = 1 q.append(i) N, W = map(int, sys.stdi..
파이썬 | 백준 | 9935 | 문자열 폭발 solution 1. 파이썬에서 문자열은 값 못 바꿈 → 배열 변환(stack을 이용하였다) 2. 끝의 글자가 같으면 폭발 문자열의 길이만큼 비교하며, 같으면 pop # 9935, 문자열 폭발 import sys s1 = sys.stdin.readline().rstrip() s2 = sys.stdin.readline().rstrip() s1 = list(s1) s2 = list(s2) stack = [] for ch in s1: stack.append(ch) if ch == s2[-1]: for i in range(1, len(s2)+1): if len(stack)
파이썬 | 백준 | 1251 | 단어 나누기 | 문자열 reverse solution 임의의 두 부분 → 조합(combinations) 문자열 reverse → [string][::-1] # 1251, 단어 나누기 import sys from itertools import combinations s = sys.stdin.readline().rstrip() candidates = [i for i in range(1, len(s))] comb_candidates = list(combinations(candidates, 2)) res = "z"*len(s) # 사전에서 가장 뒤에 오는 문자열 임의로 설정 for comb_candidate in comb_candidates: split1, split2 = comb_candidate[0], comb_candidate[1] # [::..
파이썬 | 백준 | 1202 | 보석 도둑 solution 1. 힙 이용. 1) 가치 - 최대힙을 이용하여 pop하고 무게가 배낭의 수용 가능한 무게보다 작으면 결과에 더한다. 2) 배낭의 무게 - 최소힙을 이용하여 수용 가능한 무게가 작은 것부터 담을 수 있는 최대 무게를 구한다. →시간초과 # 1202, 보석 도둑 import sys import heapq N, K = map(int, sys.stdin.readline().split()) jewels = [] bags = [] for _ in range(N): M, V = map(int, sys.stdin.readline().split()) # 무게, 가격 heapq.heappush(jewels, ((-V, V), M)) for _ in range(K): heapq.heappush(bags, ..
파이썬 | 백준 | 1173 | 운동 solution 시키는 대로 하면 된다.. # 1173, 운동 import sys N, m, M, T, R = map(int, sys.stdin.readline().split()) sec, sec_exercise = 0, 0 # 총 필요한 시간, 운동한 시간 now = m if now > M or now + T > M: # 운동을 할 수 없으면 print(-1) sys.exit() while sec_exercise < N: if now + T M: now -= R if now < m: # X-R이 m보다 작으면 맥박은 m이다. now = m sec += 1 print(sec) 문제 출처 www.acmicpc.net/problem/1173 1173번: 운동 첫째 줄에 다섯 정수 N, m, M, T, R이 ..
파이썬 | 백준 | 9576 | 책 나눠주기 solution 1. 최소힙을 이용 (b 기준) 2. defaultdict 이용해 이미 나눠준 책인지 확인 # 9576, 책 나눠주기 import sys from collections import defaultdict import heapq T = int(sys.stdin.readline()) while T: shared = defaultdict(int) want = [] # N개의 서적을 M명에게 나눠줌 N, M = map(int, sys.stdin.readline().split()) cnt = 0 # 책 받은 사람 수 for _ in range(M): a, b = map(int, sys.stdin.readline().split()) heapq.heappush(want, (b, a)) while wan..
파이썬 | 백준 | 16918 | 봄버맨 solution 3 : 폭탄이 설치되어 있지 않은 모든 칸에 폭탄을 설치한다 → make_bombs() 4 : 1초가 지난 후에 3초 전에 설치된 폭탄이 모두 폭발한다 → explode() # 16918, 봄버맨 import sys from collections import deque def loc_bombs(): # 폭탄 위치 찾아 bombs deque에 저장 for i in range(R): for j in range(C): if board[i][j] == 'O': bombs.append((i, j)) def make_bombs(): # 모든 자리에 폭탄 설치 for i in range(R): for j in range(C): if board[i][j] == '.': board[i][j] = 'O' ..
파이썬 | 백준 | 10282 | 해킹 solution : bfs 시간 초과 # 10282, 해킹 import sys from collections import deque t = int(sys.stdin.readline()) while t: # 컴퓨터 개수, 의존성 개수, 해킹당한 컴퓨터 번호 n, d, c = map(int, sys.stdin.readline().split()) network = [[] for _ in range(n+1)] visited = [1001]*(n+1) for _ in range(d): a, b, s = map(int, sys.stdin.readline().split()) network[b].append((a, s)) q = deque() q.append(c) visited[c] = 0 while q: now = ..