백준 1759 암호 만들기
2022. 9. 24. 20:08
백준
풀이 ahdma = 'aeiou' def solve(depth): if depth == K: # 모음, 자음 숫자 확인 a, b = 0, 0 for _ in range(K): if ans[_] in ahdma: a += 1 else: b += 1 # 모음과 자음 개수가 안맞다면 return if not (a >=1 and b >= 2): return print(''.join(ans)) return for i in range(N): if visited[i]: continue # ans에 값이 담겨 있고, ans의 마지막 원소의 아스키 코드값이 현재 넣을 요소의 아스키 코드 값보다 크면 다시 돌아가 if len(ans) > 0: if ord(ans[-1]) > ord(code[i]): continue ans..
백준 2146 다리 만들기 (파이썬)
2022. 9. 24. 19:05
백준
풀이 import sys; from collections import deque; # sys.stdin = open('다리.txt', 'r') sys.setrecursionlimit(10**6) def bfs(r, c): my_color = map[r][c] Q = deque() Q.append((r, c)) visit2[r][c] = 1 while Q: r, c = Q.popleft() for di, dj in [[1, 0], [0, 1], [-1, 0], [0, -1]]: nr, nc = r + di, c + dj if 0
백준 1918 후위 표기식 (파이썬)
2022. 9. 20. 22:01
백준
풀이 및 해설(주석) def isp(s): if s == '*' or s == '/': return 2 elif s == '(': return 0 else: return 1 def icp(s): if s == '*' or s == '/': return 2 elif s == '(': return 3 else: return 1 def cal_1(lst): # 후위 표기식으로 변환하는 함수 stack = [] for i in lst: if i.isalpha(): # 숫자인 경우 빈 리스트에 넣어준다. result_1.append(i) elif i == '(': # 여는 괄호일 경우 무조건 스택에 넣어준다. stack.append(i) elif i == ')': # 닫는 괄호가 나오면 여는 괄호가 나올 때 까지..
백준 3980 선발 명단 백트래킹 (파이썬)
2022. 9. 20. 21:43
백준
풀이 주석참조 def solve(depth): global result # depth를 포지션으로 정의 depth가 11이 되면, 포지션이 꽉 찬 상태 if depth == 11: # 지금까지 넣어논 선수의 능력치를 모두 더한값을 정해주고 return result = max(result, sum(ans)) return # 여기서 사용하는 i는 배열의 열, 행은 depth로 정의 즉, 배열의 열이 하나 있다면, 다른 행의 요소는 열 번호가 달라야함 for i in range(11): if visited[i]: continue # 0이 아니라면 if skill[depth][i]: visited[i] = 1 ans.append(skill[depth][i]) solve(depth+1) # 마지막 원소를 pop하..
백준 5427 불 (파이썬)
2022. 9. 18. 14:53
백준
풀이 from collections import deque # 불이 퍼지는 함수 시간 단위로 한번만 실행됨 def bfs1(): for _ in range(len(Q_f)): r, c = Q_f.popleft() for di, dj in [[1, 0], [0, 1], [-1, 0], [0, -1]]: nr, nc = r + di, c + dj if 0
백준 N과 M 3~12 (파이썬)
2022. 9. 17. 18:35
백준
N과 M (3) 코드 import sys def solve(depth, N, M): # depth가 M과 같아질 때 리턴 if depth == M: print(*ans) return for i in range(1, N+1): # if visited[i]: # continue # visited[i] = 1 ans.append(i) solve(depth+1, N, M) # 리턴 후 실행될 코드 # for문이 끝나도 실행이 된다. ans.pop() visited[i] = 0 N, M = map(int, sys.stdin.readline().split()) arr = [] for i in range(1, N+1): arr.append(i) visited = [0] * (N+1) ans = [] solve(0, ..
백준 15650 N과 M (2) (파이썬)
2022. 9. 15. 21:31
백준
풀이 import sys def solve(depth, N, M): # depth가 M과 같아질 때 리턴 if depth == M: print(*ans) return for i in range(1, N+1): if visited[i]: continue if not ans: visited[i] = 1 ans.append(i) solve(depth + 1, N, M) ans.pop() visited[i] = 0 elif i > ans[-1]: visited[i] = 1 ans.append(i) solve(depth+1, N, M) ans.pop() visited[i] = 0 N, M = map(int, sys.stdin.readline().split()) arr = [] for i in range(1, N+..
백준 15649 N과 M (1) (파이썬)
2022. 9. 15. 19:41
백준
풀이 import sys def solve(depth, N, M): # depth가 M과 같아질 때 리턴 if depth == M: print(*ans) return for i in range(1, N+1): if visited[i]: continue visited[i] = 1 ans.append(i) solve(depth+1, N, M) # 리턴 후 실행될 코드 # for문이 끝나도 실행이 된다. ans.pop() visited[i] = 0 N, M = map(int, sys.stdin.readline().split()) arr = [] for i in range(1, N+1): arr.append(i) visited = [0] * (N+1) ans = [] solve(0, N, M) 재귀 , 백트래킹..