백준
![[14888] 연산자 끼워넣기 - Python](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB8bqo%2Fbtr5OzcvcQn%2FK65s9JTjq9rtB2KXLplbM0%2Fimg.png)
[14888] 연산자 끼워넣기 - Python
/* 문제 */ N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어진다. 또, 수와 수 사이에 끼워넣을 수 있는 N-1개의 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다. 우리는 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있다. 이때, 주어진 수의 순서를 바꾸면 안 된다. 예를 들어, 6개의 수로 이루어진 수열이 1, 2, 3, 4, 5, 6이고, 주어진 연산자가 덧셈(+) 2개, 뺄셈(-) 1개, 곱셈(×) 1개, 나눗셈(÷) 1개인 경우에는 총 60가지의 식을 만들 수 있다. 예를 들어, 아래와 같은 식을 만들 수 있다. 1+2+3-4×5÷6 1÷2+3+4-5×6 1+2÷3×4-5+6 1÷2×3-4+5+6 식의 계산은 ..
![[15686] 치킨 배달 - Python](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6LmQG%2Fbtr5rbIOUth%2FQNmnqjzYdGOvPvyNPiCxJ1%2Fimg.png)
[15686] 치킨 배달 - Python
/* 문제 */ 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸, 왼쪽에서부터 c번째 칸을 의미한다. r과 c는 1부터 시작한다. 이 도시에 사는 사람들은 치킨을 매우 좋아한다. 따라서, 사람들은 "치킨 거리"라는 말을 주로 사용한다. 치킨 거리는 집과 가장 가까운 치킨집 사이의 거리이다. 즉, 치킨 거리는 집을 기준으로 정해지며, 각각의 집은 치킨 거리를 가지고 있다. 도시의 치킨 거리는 모든 집의 치킨 거리의 합이다. 임의의 두 칸 (r1, c1)과 (r2, c2) 사이의 거리는 |r1-r2| + |c1-c2|로 구한다. 예를 들어, 아래..
![[7662] 이중 우선순위 큐 - Python](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJrZpG%2Fbtr2ZCppG5i%2FqWbTZGeo9nBjwl2kbwrr51%2Fimg.png)
[7662] 이중 우선순위 큐 - Python
/* 문제 */ 이중 우선순위 큐(dual priority queue)는 전형적인 우선순위 큐처럼 데이터를 삽입, 삭제할 수 있는 자료 구조이다. 전형적인 큐와의 차이점은 데이터를 삭제할 때 연산(operation) 명령에 따라 우선순위가 가장 높은 데이터 또는 가장 낮은 데이터 중 하나를 삭제하는 점이다. 이중 우선순위 큐를 위해선 두 가지 연산이 사용되는데, 하나는 데이터를 삽입하는 연산이고 다른 하나는 데이터를 삭제하는 연산이다. 데이터를 삭제하는 연산은 또 두 가지로 구분되는데 하나는 우선순위가 가장 높은 것을 삭제하기 위한 것이고 다른 하나는 우선순위가 가장 낮은 것을 삭제하기 위한 것이다. 정수만 저장하는 이중 우선순위 큐 Q가 있다고 가정하자. Q에 저장된 각 정수의 값 자체를 우선순위라고 ..
![[11279] 최대 힙 - Python](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2K3TW%2Fbtr21A5oOKM%2FCtbk774s5eYVSwHmktQgpK%2Fimg.png)
[11279] 최대 힙 - Python
/* 문제 */ 널리 잘 알려진 자료구조 중 최대 힙이 있다. 최대 힙을 이용하여 다음과 같은 연산을 지원하는 프로그램을 작성하시오. 1. 배열에 자연수 x를 넣는다. 2. 배열에서 가장 큰 값을 출력하고, 그 값을 배열에서 제거한다. 프로그램은 처음에 비어있는 배열에서 시작하게 된다. 최대 힙을 구현해 보는 문제다. 파이썬의 내장 모듈 heapq를 사용했다. # 정답 코드 import sys input = sys.stdin.readline import heapq heap = [] n = int(input()) for _ in range(n): x = int(input()) if x == 0: if len(heap) == 0: print(0) else: print(-heapq.heappop(heap)) ..
![[1927] 최소 힙 - Python](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlVwZt%2Fbtr2ZDhv7bV%2FUTk1gXxQqySAJidNt043K1%2Fimg.png)
[1927] 최소 힙 - Python
/* 문제 */ 널리 잘 알려진 자료구조 중 최소 힙이 있다. 최소 힙을 이용하여 다음과 같은 연산을 지원하는 프로그램을 작성하시오. 1. 배열에 자연수 x를 넣는다. 2. 배열에서 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다. 프로그램은 처음에 비어있는 배열에서 시작하게 된다. 최소 힙을 구현해보는 문제다. 파이썬의 내장 모듈 heapq를 사용했다. # 정답 코드 import sys input = sys.stdin.readline import heapq heap = [] n = int(input()) for _ in range(n): x = int(input()) if x == 0: if len(heap) == 0: print(0) else: print(heapq.heappop(heap)) e..
![[13913] 숨바꼭질 4 - Python](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBkO9x%2Fbtr1znlLMN1%2FiPs0yq2cDnyXK7EzKYuzgK%2Fimg.png)
[13913] 숨바꼭질 4 - Python
/* 문제 */ 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다. 수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오. 동생을 찾을 수 있는 가장 빠른 시간과 이동 순서를 출력하는 문제다. 최단거리 문제이므로 bfs로 풀었다. 처음에는 이동 순서를 저장하기 위해 visited 딕셔너리를 선언해 각 위치에 도달하기 위한 이동 순서를 ..
![[12852] 1로 만들기 2 - Python](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz9o0d%2Fbtr1dlcdgLW%2FoXaRKHkG59OGMXu1FYn7Nk%2Fimg.png)
[12852] 1로 만들기 2 - Python
/* 문제 */ 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. 1. X가 3으로 나누어 떨어지면, 3으로 나눈다. 2. X가 2로 나누어 떨어지면, 2로 나눈다. 3. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. dp 문제지만 이번에는 최소 연산 횟수 뿐만 아니라 그 연산에 포함된 수까지 출력해야 한다. # 정답 코드 n = int(input()) dp = {} # key: 숫자, value: 그 과정의 수 리스트 dp[1] = [1] dp[2] = [1, 2] for i in range(3, n+1): tem = [dp[i-1][:]] if i%3 == 0: tem.append(dp[i/..
![[1525] 퍼즐 - Python](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbu7IXd%2Fbtr1ueijp6f%2FM2XUeCYqmAkNfvhpoJG4cK%2Fimg.png)
[1525] 퍼즐 - Python
/* 문제 */ 3×3 표에 다음과 같이 수가 채워져 있다. 오른쪽 아래 가장 끝 칸은 비어 있는 칸이다. 어떤 수와 인접해 있는 네 개의 칸 중에 하나가 비어 있으면, 수를 그 칸으로 이동시킬 수가 있다. 물론 표 바깥으로 나가는 경우는 불가능하다. 우리의 목표는 초기 상태가 주어졌을 때, 최소의 이동으로 위와 같은 정리된 상태를 만드는 것이다. 다음의 예를 보자. 가장 윗 상태에서 세 번의 이동을 통해 정리된 상태를 만들 수 있다. 이와 같이 최소 이동 횟수를 구하는 프로그램을 작성하시오. 최소의 이동으로 퍼즐을 정리해야 한다는 점, 숫자 블록을 상하좌우로 움직일 수 있다는 점에서 그래프 문제와 비슷하다고 생각했지만 풀이법을 한 번에 떠올리기는 쉽지 않았다. 예전 문제에서 풀었던 대로 표를 2차원 리..