백트래킹 6

[백준][Python] 1189 컴백홈

⛺️ https://www.acmicpc.net/problem/1189 1189번: 컴백홈 첫 줄에 정수 R(1 ≤ R ≤ 5), C(1 ≤ C ≤ 5), K(1 ≤ K ≤ R×C)가 공백으로 구분되어 주어진다. 두 번째부터 R+1번째 줄까지는 R×C 맵의 정보를 나타내는 '.'과 'T'로 구성된 길이가 C인 문자열이 주어진다 www.acmicpc.net 내 풀이 (첫 번째) def dfs(x, y, d): global ans if x == 0 and y == C - 1: count_T = 0 for i in range(R): count_T += visited[i].count(True) if count_T == K - 1: ans += 1 return if x = R or y < 0 o..

코딩테스트 2024.04.14

[백준][Python] 7490 0 만들기

🧮 https://www.acmicpc.net/problem/7490 7490번: 0 만들기 각 테스트 케이스에 대해 ASCII 순서에 따라 결과가 0이 되는 모든 수식을 출력한다. 각 테스트 케이스의 결과는 한 줄을 띄워 구분한다. www.acmicpc.net 내 풀이 def dfs(n, s): if n == N: s += str(N) ns = ''.join(s.split()) if eval(ns) == 0: ans.append(s) return dfs(n+1, s + str(n) + '+') dfs(n+1, s + str(n) + '-') dfs(n+1, s + str(n) + ' ') T = int(input()) for _ in range(T): ans = [] N = int(input()) df..

코딩테스트 2024.03.28

[백준][Python] 16987 계란으로 계란치기

🥚 https://www.acmicpc.net/problem/16987 16987번: 계란으로 계란치기 원래 프로그래머의 기본 소양은 팔굽혀펴기를 단 한 개도 할 수 없는 것이라고 하지만 인범이는 3대 500을 넘기는 몇 안되는 프로그래머 중 한 명이다. 인범이는 BOJ에서 틀린 제출을 할 때마다 턱 www.acmicpc.net 내 풀이 def dfs(n): ans = 0 if n == N: # 모든 계란을 검사한 경우 종료 cnt = 0 for i in range(N): if eggs[i][0] 0: # 같은 계란이 아니면서 깰 수 있는 계란인 경우 eggs[k][0] -= eggs[n][1] eggs[n][0] -= eggs[k][1] ans = max(ans, dfs(n+1)) eggs[k][0] ..

코딩테스트 2024.03.21

[백준][Python] 2529 부등호

﹤﹥ https://www.acmicpc.net/problem/2529 2529번: 부등호 두 종류의 부등호 기호 ‘’가 k개 나열된 순서열 A가 있다. 우리는 이 부등호 기호 앞뒤에 서로 다른 한 자릿수 숫자를 넣어서 모든 부등호 관계를 만족시키려고 한다. 예를 들어, 제시 www.acmicpc.net 내 풀이 def dfs(n, lst): if n == k+1: # 부등호 관계를 만족하는 정수가 만들어진 경우 ans.append(lst) return for j in range(10): if not visited[j]: if n == 0: visited[j] = True dfs(n+1, lst + [j]) visited[j] = False else: if eval(str(lst[n-1]) + inequ..

코딩테스트 2024.03.20

[백준][Python] 18429 근손실

💪🏻 https://www.acmicpc.net/problem/18429 18429번: 근손실 웨이트 트레이닝을 좋아하는 어떤 대학원생은, 현재 3대 운동 중량 500의 괴력을 소유하고 있다. 다만, 하루가 지날 때마다 중량이 K만큼 감소한다. 예를 들어 K=4일 때, 3일이 지나면 중량이 488로 www.acmicpc.net 내 풀이 (순열 사용, 브루트포스) from itertools import permutations N, K = map(int, input().split()) A = list(map(int, input().split())) arr = [] ans = 0 current = 500 # 현재 중량 for i in permutations(A, N): arr.append(list(i)) fo..

코딩테스트 2024.03.10

[백준][Python] 1759 암호 만들기

🔐 https://www.acmicpc.net/problem/1759 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 내 풀이 def dfs(n, s, lst): if n == L: # 길이가 L인 암호가 만들어진 경우 ans.append(lst) # 정답 리스트에 추가 return else: for i in range(s, C): dfs(n+1, i+1, lst+[chars[i]]) # 암호에 알파벳 추가 vowel = ['a', 'e', 'i', 'o', 'u'] # 모음 리스트 chars = [] # 주어지는..

코딩테스트 2024.03.02