Queue 14

[Python] 15991. MooTube (Silver)

문제 https://www.acmicpc.net/problem/15591 15591번: MooTube (Silver) 농부 존은 1번 동영상과 2번 동영상이 USADO 3을 가지고, 2번 동영상과 3번 동영상이 USADO 2를 가지고, 2번 동영상과 4번 동영상이 USADO 4를 가진다고 했다. 이것에 기반해서 1번 동영상과 3번 동영상의 www.acmicpc.net 풀이 과정 동영상과 유사도를 가지고 그래프를 만들어 농부 존이 제시한 동영상 v에서 유사도 k 이상으로 이어진 동영상이 몇 개 있는지 묻는 문제이다. 따라서 이어진 동영상의 유사도가 k이상이면 해당 동영상에서 또 이어진 동영상을 탐색해야 하는 과정을 반복해야 하고, 동영상 개수를 세야 하므로 BFS를 활용하였다. 여기서 주의할 점은 존은 두..

Algorithm/Baekjoon 2022.10.05

[Python] 13335. 트럭

문제 https://www.acmicpc.net/problem/13335 13335번: 트럭 입력 데이터는 표준입력을 사용한다. 입력은 두 줄로 이루어진다. 입력의 첫 번째 줄에는 세 개의 정수 n (1 ≤ n ≤ 1,000) , w (1 ≤ w ≤ 100) and L (10 ≤ L ≤ 1,000)이 주어지는데, n은 다리를 건너는 트 www.acmicpc.net 풀이 과정 프로그래머스 - 다리 위를 지나는 트럭과 같은 문제였다. 큐를 이용하여 문제를 해결하였다. 트럭이 한 대씩 다리에 올라가게 된다. (다리 => 큐) 이때 다리에 트럭이 올라갈 자리가 있다면 1-1. 그리고 해당 트럭의 무게로 다리에 올라가도 된다면, 다리에 트럭을 추가해주고, 현재 다리의 무게를 기록한다. (시간 + 1) 1-2. 트..

Algorithm/Baekjoon 2022.10.05

[Java] 다리 위를 지나는 트럭

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42583 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 큐를 활용하여 푼 문제 트럭이 한 대씩 다리에 올라가게 된다. (다리 => 큐) 이때 다리에 트럭이 올라갈 자리가 있다면 1-1. 그리고 해당 트럭의 무게로 다리에 올라가도 된다면, 다리에 트럭을 추가해주고, 현재 다리의 무게를 기록한다. (시간 + 1) 1-2. 트럭의 무게 때문에 다리에 올라갈 수 없다면, 0을 다리에 추가해준다. (시간 + 1) 다리에 빈자리가 없다면, 다리의..

[Python] 2589. 보물섬

from collections import deque # 상 하 좌 우 dy = [-1, 1, 0, 0] dx = [0, 0, -1, 1] def bfs(sy, sx, hour): queue = deque([(sy, sx, hour)]) # 시작지점 추가하고 시작 visited = [[0 for _ in range(garo)] for _ in range(sero)] # 방문한 곳 다시 방문하지 못하도록 만든 리스트 visited[sy][sx] = 1 # 시작지점 방문처리 while queue: y, x, hour = queue.popleft() # 좌표 하나 가져오기 for i in range(4): ny = y + dy[i] nx = x + dx[i] if 0

Algorithm/Baekjoon 2021.10.19

[Python] 5105. 미로의 거리

# 방향 벡터 / 상, 하, 좌, 우 dy = [1, -1, 0, 0] dx = [0, 0, -1, 1] # 미로탈출 bfs(시작 y좌표, 시작 x 좌표) -> 2의 위치 def bfs(sy, sx): q = [(sy, sx)] # q에 시작 좌표 넣어주고 시작 # q가 빌때까지 반복 while q: now_y, now_x = q.pop(0) # 현재 좌표 q에서 가져오기 (bfs니까 맨앞에꺼) # 상하좌우 탐색 for i in range(4): # 이동해볼 좌표 설정 (현재 위치 + 방향 벡터가 가리키는 곳) next_y = now_y + dy[i] next_x = now_x + dx[i] # 이동해볼 곳이 미로 범위 안에 있다 ? if 0

[Python] 5102. 노드의 거리

def bfs(s, g): q = [s] # 큐 생성 및 시작점 넣어주기 while q: now = q.pop(0) # 큐의 맨 앞에서 저장된 노드 가져오기 if now == g: # 현재 노드가 목표 노드라면 중지 return for i in adj[now]: # 현재 노드에서 연결된 노드 다가져와 if not distance[i]: # 연결된 노드 i가 아직 방문 안한곳이면 q.append(i) # 방문해봐야지. q에 넣어준다. # 출발노드 ~ 노드 i 까지의 거리 = 출발노드 ~ 현재노드까지의 거리 +1 # 왜냐면 현재 노드(변수 now)에서 1칸 움직인거니까 distance[i] = distance[now] + 1 tc = int(input()) for idx in range(1, tc+1): v..

[Python] 5099. 피자굽기

tc = int(input()) for idx in range(1, tc+1): n, m = map(int, input().split()) # 화덕의 크기 n, 피자의 개수 m pizza = list(map(int, input().split())) # 만들 피자 가져오기 # 인덱스 같이 넣어줌 ex) [[7, 1], [2, 2], [6, 3], [5, 4] [3, 5]] pizza_info = [[pizza[i], i+1] for i in range(m)] fire = pizza_info[:n] # 화덕에 먼저 들어간 피자 pizza = pizza_info[n:] # 화덕에 아직 못들어간 피자 # 화덕에서 피자가 없어질때까지 반복 while fire: p, p_i = fire.pop(0) # 확인할 피자..

[Python] 1226. 미로1

# 방향 벡터 / 상, 하, 좌, 우 dy = [1, -1, 0, 0] dx = [0, 0, -1, 1] # 미로탈출 bfs(시작 y좌표, 시작 x 좌표) -> 2의 위치 def bfs(sy, sx): visited[sy][sx] = 1 q = [(sy, sx)] # q에 시작 좌표 넣어주고 시작 # q가 빌때까지 반복 while q: now_y, now_x = q.pop(0) # 현재 좌표 q에서 가져오기 (bfs니까 맨앞에꺼) # 상하좌우 탐색 for i in range(4): # 이동해볼 좌표 설정 (현재 위치 + 방향 벡터가 가리키는 곳) next_y = now_y + dy[i] next_x = now_x + dx[i] # 이동해볼 곳이 미로 범위 안에 있다 ? if 0

[Python] 1225. 암호생성기

# tc 10개 for _ in range(10): idx = int(input()) data = list(map(int, input().split())) # 현재 진행중인 사이클에서 빼야할 값의 크기를 알고 있어야 한다. cnt = 1 while data[-1] > 0: # 한 사이클은 5까지 빼는게 한 사이클이다. # 빼고자 하는 값의 크기가 5초과가 되면 다시 1로 돌아가야 한다. if cnt == 6: cnt = 1 # 첫번째에 위치한 숫자 감소한 뒤, 맨 뒤로 보낸다. data.append(data.pop(0) - cnt) cnt += 1 # 데이터 마지막 값은 0으로 고정 (음수 -> 0으로) data[-1] = 0 print('#{}'.format(idx), end=' ') print(*da..