반응형
백준 python 1759번
입력
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
출력
각 줄에 하나씩, 사전식으로 가능성 있는 암호를 모두 출력한다.
Python |
l, c = map(int, input().split())
cipher = list(input().split())
visited = [False] * c
vowels = ['a', 'e', 'i', 'o', 'u']
cipher.sort()
string =""
def BackTrack(depth, start):
global string
if depth == l:
Vaildation(string)
return
for i in range(start, c):
if visited[i]:
continue
visited[i] = True
string += cipher[i]
BackTrack(depth+1, i)
string = string[:-1]
visited[i] = False
def Vaildation(string):
vowel_count = 0
consonant_count = 0
for i in range(len(string)):
if string[i] in vowels:
vowel_count += 1
else:
consonant_count += 1
if i == len(string) - 1:
if vowel_count >= 1 and consonant_count >= 2 :
print(string)
BackTrack(0, 0)
백준 20208번
입력
첫번째 줄에 민초마을의 크기인 N과 진우의 초기체력 M, 그리고 민트초코우유를 마실때 마다 증가하는 체력의 양 H가 공백을 두고 주어진다. N, M, H는 모두 10보다 작거나 같은 자연수이다.
두번째 줄부터 N+1번째 줄에 N칸에 걸쳐서 민초마을의 지도가 주어진다. 각 칸은 공백을 두고 주어지며 지도상에서 진우의 집은 1, 민트초코우유는 2로 주어지며 빈 땅은 0으로 주어진다. 진우의 집은 무조건 한 곳이 주어지며 마을에 배달되는 민트초코우유의 총합은 10개를 넘지 않는다.
출력
진우가 집을 나와서 다시 집으로 돌아올 때 까지 마실 수 있는 민트초코우유의 최대 개수를 출력하자.
반응형
Python |
n, hp, hp_puls = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(n)]
max_mint = 0
eat_mint = 0
start_x = -1
start_y = -1
mint_position = list()
for i in range(n):
for j in range(n):
if graph[i][j] == 1:
start_x = i
start_y = j
mint_position.append((i, j))
elif graph[i][j] == 2:
mint_position.append((i, j))
def BackTrack(x, y):
global hp, eat_mint, max_mint
for i in range(len(mint_position)):
mint_x, mint_y = mint_position[i]
if graph[mint_x][mint_y] == 2:
if hp >= abs(x - mint_x) + abs(y - mint_y):
graph[mint_x][mint_y] = 0
hp += hp_puls
hp -= abs(x - mint_x) + abs(y - mint_y)
eat_mint += 1
BackTrack(mint_x, mint_y)
hp -= hp_puls
hp += abs(x - mint_x) + abs(y - mint_y)
eat_mint -= 1
graph[mint_x][mint_y] = 2
elif graph[mint_x][mint_y] == 1:
if hp >= abs(x - mint_x) + abs(y - mint_y):
max_mint = max(eat_mint, max_mint)
BackTrack(start_x, start_y)
print(max_mint)
백준 python 1149번
입력
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 모든 집을 칠하는 비용의 최솟값을 출력한다.
Python |
import copy
n = int(input())
cost = [list(map(int, input().split())) for _ in range(n)]
dp = [[10001] * 3 for _ in range(n)]
def RGB():
for i in range(n):
for j in range(3):
if i == 0:
dp[i][j] = cost[i][j]
else:
if j == 0:
dp[i][j] = min(dp[i-1][1], dp[i-1][2]) + cost[i][j]
elif j == 1:
dp[i][j] = min(dp[i - 1][0], dp[i - 1][2]) + cost[i][j]
else:
dp[i][j] = min(dp[i - 1][0], dp[i - 1][1]) + cost[i][j]
RGB()
print(min(dp[n-1]))
반응형
'알고리즘 백준문제풀기' 카테고리의 다른 글
백준 파이선 python 1717번 / 1976번 / 11675번 타임머신 (0) | 2022.02.06 |
---|---|
백준 python 7576번 토마토/ 14503번 로봇청소기 / 2206번 벽부수고이동하기 (0) | 2022.02.03 |
백준 python 2580번 스도쿠 / 14888번 / (0) | 2022.02.01 |
백준 python 1697번 숨바꼭질 / 백준 15649번 / (0) | 2022.01.30 |
백준 python 1260번 DFS -BFS / 2606번 바이러스 / 2667번 단지번호 (0) | 2022.01.27 |
댓글