study/Algorithm

문제 설명정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱하고 다시 1을 더합니다.이러한 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때, arr(x) = arr(x + 1)인 x가 항상 존재합니다. 이러한 x 중 가장 작은 값을 return 하는 solution 함수를 완성해 주세요.단, 두 배열에 대한 "="는 두 배열의 크기가 서로 같으며, 같은 인덱스의 원소가 각각 서로 같음을 의미합니다.제한사항1 ≤ arr의 길이 ≤ 1,000,0001 ≤ arr의 원소의 값 ≤ 100입출력 예arrresult[1, 2, 3, 100, 99, 98]5입출력 예 설명입출력 예 #1위 작업을 반복하면 다음과 같이..
# 다익스트라 # a가 b에 의존함 => b에서 a로 갈 수 있다 from heapq import * import sys input = sys.stdin.readline t = int(input()) # 테스트 케이스 수 for _ in range(t): n, d, c = map(int, input().split()) # 컴퓨터 수, 의존성 개수, 해킹당한 컴퓨터 번호(시작점) graph = [[] for _ in range(n+1)] # 그래프 초기화 for _ in range(d): a, b, s = map(int, input().split()) # 컴퓨터a, 컴퓨터b, 감염되는데 걸리는 시간 graph[b].append([a, s]) # 의존하는 쪽으로 갈수있으니 b에 추가 time = [1e9] ..
""" 31120KB40ms """ # s를 t로 바꾸는게 가능한지. # 문자열의 뒤에 a 추가하기 # 문자열의 뒤에 b를 추가하고 뒤집기 # t에서 s만큼 될때까지 연산해서 s가 나오는지? s = list(input()) t = list(input()) def text_check(t): if t == s: # t와 s가 같다면 1 출력하고 종료 print(1) exit(0) if len(t) == 0: # t가 모두 삭제될 경우 return 0 if t[-1] == 'A': # A는 문자열의 뒤에 추가. -1에서 찾음 text_check(t[:-1]) if t[0] == 'B': # B는 문자열 뒤에 추가 + 뒤집기 = 앞에 와있음. 0에서 찾고 제거 후 뒤집기 text_check(t[1:][::-1]..
""" 53516KB276ms """ # 최소 여물. 다익스트라 from heapq import * import sys input = sys.stdin.readline n, m = map(int, input().split()) graph = [[] for _ in range(n+1)] for _ in range(m): a, b, c = map(int, input().split()) graph[a].append([b, c]) graph[b].append([a, c]) cost = [1e9 for _ in range(n + 1)] heap = [] cost[1] = 0 heappush(heap, [0, 1]) while heap: cur_cost, cur_node = heappop(heap) if cost[..
""" 31120KB44ms """ # 최종후보를 오름차순으로 출력 # 추천 시작 전에는 사진틀이 비어있음 # 추천하면 사진틀에 올라감 # 비어있는 사진틀이 없는 경우 - 추천횟수가 가장 작은거 삭제하고 추가함. 추천 횟수가 적은 학생이 두명 이상이면 오래된거 삭제함 # 게시된게 추천받으면 추천횟수간 증가 # 게시가 삭제되면 추천횟수는 초기화됨 import sys input = sys.stdin.readline n = int(input()) r = int(input()) student = list(map(int, input().split())) nominee = {} for i in student: # 빈 사진틀이 있을때 - 딕셔너리에 후보 : 추천수 로 추가 if len(nominee) < n: if ..
# 17점 # 제일 왼쪽(0)에서 제일 오른쪽(n-1)까지 가는 최소 비용. # 현재 가격이 다음 가격보다 비싸거나 같다면 - 필요한만큼만 사기 # 현재 가격이 다음 가격보다 싸다면 - 다음 길이까지 구매하기 n = int(input()) road = list(map(int, input().split())) oil = list(map(int, input().split())) cost = 0 for i in range(len(oil)-1): if i != 0 and oil[i-1] = oil[i+1]: cost += oil[i] * road[i] elif oil[i] < oil[i+1]: cost += (oil[i] * road[i]) + (oil[i]..
문제 설명 게임개발자인 "죠르디"는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다. "죠르디"는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다. 게임 화면은 "1 x 1" 크기의 칸들로 이루어진 "N x N" 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 "5 x 5" 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 "1 x 1" 크기의 격자 한 칸을 차지하며 격자의 가장 아래 칸부터 차곡차곡 쌓여 있습니다. 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴 수 있습니다. 집어 올린 인형은 바구니에 쌓이게 되는 데,..
문제 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사과는 뛰어난 코딩 실력을 이용해 각 칸 (r, c)에 있는 미세먼지의 양을 실시간으로 모니터링하는 시스템을 개발했다. (r, c)는 r행 c열을 의미한다. 공기청정기는 항상 1번 열에 설치되어 있고, 크기는 두 행을 차지한다. 공기청정기가 설치되어 있지 않은 칸에는 미세먼지가 있고, (r, c)에 있는 미세먼지의 양은 Ar,c이다. 1초 동안 아래 적힌 일이 순서대로 일어난다. 미세먼지가 확산된다. 확산은 미세먼지가 있는 모든 칸에서 동시에 일어난다. (r, c)에 있는 미세먼지는 인접한 네 방향으로 확산된다. 인접..
# 한번의 이동에서 옮길 수 있는 중량의 최댓값 # 이분탐색으로 중량의 범위와 최대값을 찾고 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 # 건물 추..
해리Harry
'study/Algorithm' 카테고리의 글 목록 (2 Page)