study

# 한번의 이동에서 옮길 수 있는 중량의 최댓값 # 이분탐색으로 중량의 범위와 최대값을 찾고 bfs로 가능한지 확인한다 from collections import deque import sys input = sys.stdin.readline def bfs(weight): # weight = 중간값(최대 중량) queue = deque() # 큐 queue.append(one) # 시작노드인 one부터 시작 visited = [False] * (n + 1) # 방문확인 visited[one] = True while queue: x = queue.popleft() for i, w in graph[x]: # 방문 가능한 섬들을 방문 if not visited[i] and w >= weight: # 미방문 & ..
# 요구사항 - 건물이 최소 몇개일지? # 스택에 암것도 없음 -> 높이를 스택에 넣기 # 스택에 넣어야 하는경우 - 아무것도 없을때. 현재높이 보다 더 높은 건물일때. # 스택에 안넣어야 하는 경우 - 높이가 같을때.(중복) # 스택에서 빼야하는 경우 - 높이가 낮아졌을때. 해당 건물이 끝났음. import sys input = sys.stdin.readline n = int(input()) building = 0 # 건물 개수 stack = [] # 스택 선언 for i in range(n): x, y = map(int, input().split()) while stack and stack[-1] > y: # 스택에 뭐가 있음 & 최근 높이가 현재 높이보다 더 큼 building += 1 # 건물 추..
# 최소비용 계산하기. 최소힙. from heapq import * import sys input = sys.stdin.readline t = int(input()) # 테스트 케이스 수 for _ in range(t): k = int(input()) # 장 수 nums = list(map(int, input().split())) # 파일 크기 heapify(nums) # 힙으로 변환 total = 0 # 총합 while len(nums) > 1: # 더이상 더할 수가 없을때까지 더함 x = heappop(nums) # 가장 작은 수 y = heappop(nums) # 그 다음 작은 수 total += x + y # 총합에 더해주고 힙에 다시 추가 heappush(nums, x + y) print(tot..
# 동생을 찾을 수 있는 가장 빠른 시간. => 최소 거리. BFS # 걷는다면 x-1/ x+1. 순간이동은 2*x. 시간은 모두 1초. # 큐에 뭔가 있다면 k인지 아닌지 확인 # 아니라면 이동방법만큼 반복. 이동했을때 인덱스 범위 내에 있어야하고 방문하지 않았어야함 # 걸린 시간을 visited에 추가하고 1초 추가 + 큐에 추가 from collections import deque n, k = map(int, input().split()) m = 10 ** 5 # 최대 범위 visited = [0] * (m + 1) # 방문 기록 def bfs(start): queue = deque([start]) # 큐에 현재 위치를 인큐 while deque: x = queue.popleft() # x = 현재..
# 나이트가 최소 몇번 움직여야 원하는 칸으로 이동할 수 있는지 -> bfs # 나이트가 이동할수있는방향 알기. from collections import deque t = int(input()) for _ in range(t): l = int(input()) # 체스판의 길이 now = list(map(int, input().split())) # 현재 위치 dest = list(map(int, input().split())) # 이동해야하는 위치 graph = [[0] * l for _ in range(l + 1)] # 체스판 visited = [[False] * l for _ in range(l + 1)] # 방문 확인할 배열 queue = deque() # 큐 선언 # 나이트가 이동할 수 있는 방향..
from collections import deque def bfs(x,y): q.append((x, y)) # 큐에 현재 좌표 추가 dx = [-1, 0, 1, 0] # 움직일 방향 dy = [0, 1, 0, -1] visited[x][y] = 1 # 현재 위치 기준. while q: # 큐가 비지 않았다면 x, y = q.popleft() # 첫번째값을 가져옴. for d in range(4): # 4방향으로 이동 nx = x + dx[d] ny = y + dy[d] # x, y가 범위를 벗어나지 않고, 같은 색이고, 아직 방문하지 않은 경우 if 0
# 뿅망치에 맞은 경우 키가 반으로 줄어듬. 1인 경우 제외. # 매번 가장 큰 수를 줄인다. => 최대값을 찾아야 함. 최대 힙 사용. # t번 망치를 사용했을때 모든 값이 센티의 키보다 작다면 yes, 뿅망치 최소 사용 횟수 작성 # 모든 횟수를 다 써도 안되면 no, 최대값 출력 from heapq import * import sys n, h, t = map(int, input().split()) titan_h = [-int(sys.stdin.readline()) for _ in range(n)] # 최대힙 사용을 위해 음수로 바꿔줌 heapify(titan_h) cnt = 0 for i in range(t): if -titan_h[0] == 1 or -titan_h[0] < h: # 만약 거인들의..
# 스택 구현 # 가장 높은 기둥을 찾아 일차원 리스트에 추가하는데 인덱스는 가로점으로, 인덱스의 값은 높이로 저장함 # 0부터 최대 가로길이까지 반복문을 나눠서 돈다. 왼쪽 ~ 최대높이 / 오른쪽 ~ 최대높이 높이를 계속 더해준다. n = int(input()) info = [0] * 1001 # 좌표마다 높이를 넣어줄 배열을 생성. n이 1이상 1000이하이므로 거기에 맞게 만들어줌 max_height = 0 # 기둥의 최대 높이 max_height_idx = 0 # 제일 높은 기둥의 인덱스 end_idx = 0 # 끝 인덱스 # 제일 높은 기둥 찾기 for i in range(n): w, h = map(int, input().split()) # 좌표값, 높이 info[w] = h # 가로를 인덱스로..
# 평균, 중앙값, 최빈값, 범위 리턴 # 평균 - n개수의 합 // n import sys n = int(input()) nums = sorted(int(sys.stdin.readline()) for _ in range(n)) avg = round(sum(nums) / n) # 평균 mid = nums[len(nums) // 2] # 중앙값 range = nums[-1] - nums[0] # 범위 mode_dict = {} # 최빈값 담을 딕셔너리 for i in nums: # 요소별 빈도수 저장 if i in mode_dict: mode_dict[i] += 1 else: mode_dict[i] = 1 # 최빈값에 해당하는 요소들만 필터링 mode = list(filter(lambda x: mode_d..
import math def get_winning_rate(x, y): return (y * 100) // x x, y = map(int, input().split()) z = get_winning_rate(x, y) # 승률. 구할때는 소수점 버림 start, end = 1, x result = 0 if z >= 99: print(-1) else: while start z: # 승률이 변했을경우. 변하는 경우중에 최소값을 찾아야하기때문에 왼쪽범위 탐색 end = mid - 1 result = mid else: # 승률이 계속 같다면 게임을 더 해야함. 오른쪽 범위 탐색 start = mid + 1 print(result) 게임 플레이 횟수와 게임을 이긴 수가 주어졌을때, 최소 몇게임을 더 해야 승률이 ..
해리Harry
'study' 카테고리의 글 목록 (5 Page)