본문 바로가기
반응형

Problem Solving232

[백트래킹 / 파이썬] 백준 15684번 : 사다리 조작 / 골드 4 https://www.acmicpc.net/problem/15684 15684번: 사다리 조작 사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선 www.acmicpc.net 처음엔 헉..하고 당황했으나 역시 차근차근 생각하면 실마리가 풀린다. 백트래킹으로 접근했고, 필요한 사다리의 최소 개수를 찾으라는 것에서 약간 멈칫한 이유는 백트래킹은 기본적으로 dfs로 탐색이 이루어지는데 최소 개수면 bfs로 해야 하나? 라는 생각이 들었기 때문이다. 하지만 사다리 개수는 while문을 통해 제어를 해주면 되고, 그 정해진 사다리 개수 내에서 원래 하던대로 dfs로 백트래킹을.. 2022. 3. 5.
[BFS / 파이썬] 백준 9019번 : DSLR / 골드 4 https://www.acmicpc.net/problem/9019 9019번: DSLR 네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에 www.acmicpc.net import collections def op_d(n): return (2*n) % 10000 def op_s(n): if n == 0: return 9999 else: return n-1 def op_l(n): d1, d2, d3, d4 = n_to_digit(n) return digit_to_n(d2, d3, d4, d1) def op_r(n): d1, d2, d3, d4 = n_.. 2022. 3. 2.
[우선순위큐/파이썬] 백준 7662번 이중 우선순위 큐 / 골드 5 https://www.acmicpc.net/problem/7662 7662번: 이중 우선순위 큐 입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적 www.acmicpc.net import heapq test = int(input()) for _ in range(test): commands = int(input()) popped = [False for _ in range(commands)] min_heap = [] max_heap = [] num = 0 for c in range(commands): command, n = input().split() n = int(n.. 2022. 3. 1.
[BFS] 백준 7569번 : 토마토 / 골드 5 https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net import collections m, n, h = map(int, input().split()) box = [] left = 0 q = collections.deque() for z in range(h): table = [] for y in range(n): row = list(map(int, input().split())) for x in range(len(row)): .. 2022. 2. 24.
[ 브루트 포스] 백준 1107번 : 리모컨 / 골드 5 https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼 www.acmicpc.net n = int(input()) m = int(input()) if m == 0: print(min(len(str(n)), abs(n-100))) quit() broken = list(map(int, input().split())) def possible(s, broken): nums = set([int(x) for x in s]) for b in broken: if b in num.. 2022. 2. 20.
[최단 경로] 백준 2206번 : 벽 부수고 이동하기 / 골드 4 https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net import heapq x_lim, y_lim = map(int, input().split()) # edge case if x_lim == 1 and y_lim == 1: print(1) quit() table = [] for _ in range(x_lim): table.append([int(x) for x in input()]) dx = [-1, 1, 0, 0] dy =.. 2022. 2. 19.
반응형