본문 바로가기

알고리즘

(138)
[알고리즘] 백준 15653 구슬 탈출 4 / 파이썬 www.acmicpc.net/problem/15653 15653번: 구슬 탈출 4 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' www.acmicpc.net from collections import deque def move(x, y, dx, dy): m = 0 while True: if B[x][y] == 'O': break if B[x][y] == '#': x -= dx y -= dy break x += dx y += dy m += 1 return x, y, m dx, dy = [-1, 0, 1, 0], [0,..
[알고리즘] 백준 16918 봄버맨 / 파이썬 www.acmicpc.net/problem/16918 16918번: 봄버맨 첫째 줄에 R, C, N (1 ≤ R, C, N ≤ 200)이 주어진다. 둘째 줄부터 R개의 줄에 격자판의 초기 상태가 주어진다. 빈 칸은 '.'로, 폭탄은 'O'로 주어진다. www.acmicpc.net 풀이 방법 폭탄을 설치할 때, 현재 몇 초인지도 같이 저장한다 그리고 폭탄을 터트릴 때 같이 저장했던 시간이 3초 뒤라면 터트린다 # pypy 제출 def fill(num): for i in range(R): for j in range(C): if Map[i][j][0] == '.': Map[i][j][0], Map[i][j][1] = 'O', num dx, dy = [0, -1, 0, 1, 0], [0, 0, -1, 0, 1]..
[알고리즘] 백준 17070 파이프 옮기기 1 / 파이썬 www.acmicpc.net/problem/17070 17070번: 파이프 옮기기 1 유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의 www.acmicpc.net pypy 제출 def dfs(p, x, y): global result if x == N-1 and y == N-1: result += 1 return else: if p == 1: if x
[알고리즘] 백준 14499 주사위 굴리기 / 파이썬 www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도 www.acmicpc.net def map_move(d, x, y): if B[x][y] == 0: B[x][y] = d return d else: temp = B[x][y] B[x][y] = 0 return temp def sol(dice, x, y): for m in move: if m == 1: dy = y+1 if dy = M: continue y..
[알고리즘] 백준 16500 문자열 판별 / python www.acmicpc.net/problem/16500 16500번: 문자열 판별 첫째 줄에 길이가 100이하인 문자열 S가 주어진다. 둘째 줄에는 A에 포함된 문자열의 개수 N(1 ≤ N ≤ 100)이 주어진다. 셋째 줄부터 N개의 줄에는 A에 포함된 단어가 한 줄에 하나씩 주어진다. A에 �� www.acmicpc.net def sol(idx): global result if idx == len(S): result = 1 return if dp[idx]: return dp[idx] = 1 for i in range(len(A)): if len(S[idx:]) >= len(A[i]): for j in range(len(A[i])): if A[i][j] != S[idx+j]: break else: sol(..
[알고리즘] 백준 16637 괄호 추가하기 / python www.acmicpc.net/problem/16637 16637번: 괄호 추가하기 첫째 줄에 수식의 길이 N(1 ≤ N ≤ 19)가 주어진다. 둘째 줄에는 수식이 주어진다. 수식에 포함된 정수는 모두 0보다 크거나 같고, 9보다 작거나 같다. 문자열은 정수로 시작하고, 연산자와 정수가 www.acmicpc.net #스택에 숫자와 연산자를 넣어서 계산 def cal2(lst): op, num = [], [] for i in lst[::-1]: if i == '+' or i == '-' or i == '*': op.append(i) else: num.append(int(i)) while len(num) > 1: n1 = num.pop() n2 = num.pop() oper = op.pop() if oper ..
[알고리즘] 백준 9019 DSLR / python, bfs www.acmicpc.net/problem/9019 9019번: DSLR 네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에 � www.acmicpc.net from collections import deque def bfs(): q = deque() q.append([A, '']) visited[A] = 1 while q: x, y = q.popleft() if x == B: print(y) D = x*2 % 10000 if not visited[D]: visited[D] = 1 q.append([D, y + 'D']) S = x - 1 if x ..
[알고리즘] 백준 14891 톱니바퀴 / python www.acmicpc.net/problem/14891 14891번: 톱니바퀴 총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴 www.acmicpc.net def rotate(t_num, t_dir): T[t_num] = T[t_num][t_dir*-1:] + T[t_num][:t_dir*-1] def left(t_num, t_dir): if t_num == -1 or T[t_num][2] == T[t_num+1][6] : return left(t_num-1, t_dir*-1) rotate(t_num, t_dir) def right(t_num, t_dir): ..