본문 바로가기

백트랙킹14

[백준] 2661번 - 좋은수열 (파이썬) # 좋은수열 def choose_num(result, count): for i in range(1, count//2+1): if str(result)[count-i:] == str(result)[count-2*i:count-i]: return if count == N: print(result) exit(0) for i in range(1, 4): temp = result * 10 + i choose_num(temp, count+1) N = int(input()) choose_num(0, 0) 백트랙킹 1. 1번부터 3번까지의 숫자를 총 N개를 골라서 result끝자리에 계속 더해준다 2. 만약 도중에 나쁜 수열에 걸리면 return 3. 좋은 수열이면서 제일 먼저 count가 N인 수열은 제일 작은 수이.. 2022. 2. 4.
[백준] 17135번 - 캐슬 디펜스 (파이썬) # 캐슬 디펜스 import copy import sys input = sys.stdin.readline MAX = sys.maxsize N, M, D = map(int, input().split()) arr = [] enemy = [] for i in range(N): arr.append(list(map(int, input().split()))) for j in range(M): if arr[i][j] == 1: enemy.append([i, j]) enemy.sort(key=lambda x: x[1] arch = [] target = [] result = 0 def archPositon(count, k): if count == 3: temp = copy.deepcopy(arr) tenemy = cop.. 2022. 1. 30.
[백준] 14889번 - 스타트와 링크 (파이썬) # 스타트와 링크 import sys MAX = sys.maxsize N = int(input()) arr = [] for _ in range(N): arr.append(list(map(int, input().split()))) people = [i for i in range(N)] start_team = [] result = MAX def chooseMember(num, k): global result if num == N//2: link_team = [] link_team = list(set(people) - set(start_team)) result = min(result, abs(getScore(link_team) - getScore(start_team))) return for i in range.. 2022. 1. 27.
[백준] 12100번 - 2048(Easy) (파이썬) # 2048 (Easy) import copy import sys input = sys.stdin.readline N = int(input()) arr = [] for _ in range(N): arr.append(list(map(int, input().split()))) dir = [[0, 1], [1, 0], [0, -1], [-1, 0]] result = 0 def move_block(arr, n): set_result(arr) if n == 5: # 이동 끝 return for k in range(4): temp = copy.deepcopy(arr) combine_and_move(temp, k) move_block(temp, n+1) def combine_and_move(arr, k): is_co.. 2022. 1. 25.
[백준] 2252번 - 스도쿠 (파이썬) # 스도쿠 import sys input = sys.stdin.readline N = 9 arr = [] zero = [] for i in range(N): arr.append(list(map(int, input().split()))) for j in range(N): if arr[i][j] == 0: zero.append((i, j)) def check(x, y, num): for j in range(N): if arr[x][j] == num: return False for i in range(N): if arr[i][y] == num: return False temp_x = x // 3 * 3 temp_y = y // 3 * 3 for i in range(temp_x, temp_x+3): for j .. 2022. 1. 24.
[백준] 1062번 - 가르침 (파이썬) # 가르침 import sys input = sys.stdin.readline N, K = map(int, input().split()) arr = [] for _ in range(N): arr.append(input().strip()) alpha = ['a', 'n', 't', 'i', 'c'] alpha_list = ['b', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'o', 'p', 'q', 'r', 's', 'u', 'v', 'w', 'x', 'y', 'z'] def choose_alpha(n, start): global result if n == 0: result = max(result, check()) return for i in range(start, .. 2022. 1. 22.
[백준] 17142번 - 연구소 3 (파이썬) # 연구소 3 import sys import copy from collections import deque input = sys.stdin.readline MAX = sys.maxsize dx = [0, 1, 0, -1] dy = [1, 0, -1, 0] result = MAX def bfs(arr): global result time = [[0] * N for _ in range(N)] q = deque() for i in range(N): for j in range(N): if arr[i][j] == 'a': q.append((i, j)) time[i][j] = 1 while q: x, y = q.popleft() for k in range(4): nx = x + dx[k] ny = y + dy[k.. 2022. 1. 20.