Baekjoon 150

[백준 1916번] 최소비용 구하기 - 다익스트라(Dijkstra Algorithm)

1916번: 최소비용 구하기 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 www.acmicpc.net import heapq import sys input = sys.stdin.readline n = int(input()) m = int(input()) INF = float("inf") graph = [[] for _ in range(n+1)] distance = [INF]*(n+1) for _ in range(m): start, end, cost = map(int,input().split()) graph[start].appen..

[백준 12100번] 2048(Easy) - 구현 / 시뮬레이션 / 완전탐색 / 백트래킹

12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net # 4x4 크기 보드 # 한번 이동할 때 보드 위에 있는 모든 블록이 상-하-좌-우 중 하나로 이동 # 같은 값을 갖는 두 블록이 충돌하면 합쳐짐 # 한번의 이동에서 합쳐진 블록은 다시 합쳐질 수 X import copy n = int(input()) zone = [list(map(int,input().split())) for _ in range(n)] max_value = -1 # 왼쪽으로 이동시키는 함수 def moveLeft():..

[백준 1049번] 기타줄

1049번: 기타줄 첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주 www.acmicpc.net # 끊어진 기타줄 개수 N # 기타줄 브랜드 M # 각 브랜드마다 판매중인 6개의 패키지의 가격, 낱개 가격 # 적어도 N개를 사기 위해 필요한 돈의 "최솟값" n,m = map(int,input().split()) prices = [list(map(int,input().split())) for _ in range(m)] min_package = min([x[0] for x in prices]) min_item = min([x[1] for x in price..

Algorithm/Greedy 2023.10.07

[백준 2573번] 빙산

2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 www.acmicpc.net from collections import deque import copy # 각 칸의 높이는 자연수로 저장 # 빙산이 아닌 바다는 0으로 저장 # 매년 동서남북에 존재하는 바다의 개수만큼 줄어듦 # 단, 각 칸의 저장된 높이는 0에서 더 줄어들지 X dx = [-1,1,0,0] dy = [0,0,-1,1] n, m = map(int,input().split()) area = [list(map(int,input().split())) for _ in rang..

카테고리 없음 2023.10.06

[백준 2578번] 빙고

2578번: 빙고 첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로 www.acmicpc.net bingo = [list(map(int,input().split())) for _ in range(5)] numbers = [] answer = 0 for i in range(5): numbers += list(map(int,input().split())) def delete_number(n): for i in range(5): for j in range(5): if bingo[i][j] == n: bingo[i][j] = 0 return def count_row(): # 5..

[백준 14888번] 연산자 끼워넣기

14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱 www.acmicpc.net # 식의 계산은 우선 순위 무시하고 앞에서부터 진행 # 나눗셈은 몫만 취한다(//) # 음수를 양수로 나눌 때는 음수를 양수로 바꾼 뒤 몫을 취한뒤 음수로 바꾼다 n = int(input()) data = list(map(int,input().split())) # 0 : 덧셈 개수, 1 : 뺄셈 개수, 2 : 곱셈 개수, 3 : 나눗셈 개수 operator_count = list(map(int,input(..

Algorithm/DFS 2023.10.06

[백준 20055번] 컨베이어 벨트 위의 로봇

20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net n, k = map(int,input().split()) status = list(map(int,input().split())) data_top = [0]*n data_bottom = [0]*n status_top = status[:n] status_bottom = list(reversed(status[n:])) answer = 0 def count_zero(): # 내구성이 0인 칸의 개수를 구하는 함수 count = 0 for i in r..

[백준 1697번] 숨바꼭질

1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net from collections import deque n, k = map(int,input().split()) aera = [-1]*100001 visited = [-1]*100001 def getNextLocation(n): return [n-1,n+1,n*2] def bfs(): visited[n] = 0 queue = deque([n]) while queue: v = queue.popleft() if v == k: return v..

Algorithm/BFS 2023.10.03

[백준 4179번] 불!

4179번: 불! 입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 행이 주어진다. 각각의 문자 www.acmicpc.net from collections import deque r,c = map(int,input().split()) maze = [list(input()) for _ in range(r)] visited = [[-1]*c for _ in range(r)] dx = [-1,1,0,0] dy = [0,0,-1,1] fire_list = [] for i in range(r): for j in range(c): if maze[i][j] == "J": start..

Algorithm/BFS 2023.10.03

[백준 2178번] 미로 탐색

2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net from collections import deque n,m = map(int,input().split()) maze = [list(map(int,list(input()))) for _ in range(n)] visited = [[-1]*m for _ in range(n)] dx = [-1,1,0,0] dy = [0,0,-1,1] def bfs(): visited[0][0] = 1 queue = deque([(0,0)]) while queue: cur_x,cur_y = queue.popleft..

Algorithm/BFS 2023.10.03