www.acmicpc.net/problem/17269 17269번: 이름궁합 테스트 시윤이는 좋아하는 이성이 생기면 가장 먼저 이름궁합부터 본다. 이름궁합을 보는 방법은 간단하다. 먼저 이름을 알파벳 대문자로 적는다. 각 알파벳 대문자에는 다음과 같이 알파벳을 적는데 www.acmicpc.net import sys sys.stdin=open("input.txt", "r") lenA, lenB = map(int, input().split()) A, B = map(str, input().split()) times = { 'A' : 3, 'B' : 2, 'C' : 1, 'D' : 2, 'E' : 4, 'F' : 3, 'G' : 1, 'H' : 3, 'I' : 1, 'J' : 1, 'K' : 3, 'L' : 1..
BFS 루트 (시작점)에서 방문점까지의 거리를 알 수 있다. 루트의 거리는 0이다. import sys from collections import deque sys.stdin = open("input.txt", 'r') # 1 2 1 3 1 4 1 5 2 6 2 7 5 6 6 7 6 8 Data = list(map(int, input().split())) lenData = int(len(Data)/2) MyMap = [[0] * (lenData+1) for _ in range(lenData+1)] for i in range(lenData): row = Data[i*2] col = Data[i*2+1] MyMap[row][col] = 1 MyMap[col][row] = 1 visited = [0] * (l..
Queue https://jhk0307.tistory.com/137 import queue # 한쪽 방향에서 FIFO q = queue.Queue() q.put(x) # n = q.get() ## 리스트를 queue로 사용할 수도 있다. q = list() q.append(x) n = q.pop(0) # 맨 앞의 원소가 반환되나 시간 효율적으로 좋지 x https://jhk0307.tistory.com/139 from collections import deque dq = deque([1, 2, 3]) dq.append(n) dq.popleft()
DFS 시작 정점에서 한 방향으로 가능한 정점까지 탐색해 나가다가, 더 이상 방문할 정점이 없다면 이전 정점으로 되돌아와서, 방문하지 않은 다른 방향의 정점으로 탐색한다. 바로 이전의 정점으로 되돌아가 탐색을 하기 때문에 LIFO의 스택을 이용한다. 즉, 스택에는 나중에 돌아올 곳을 기록하게 된다. 스택으로 DFS list.append(x)는 리스트 끝에 x 1개를 넣는다. list.extend(iterable)는 리스트 끝에 iterable의 모든 항목을 넣는다. # 입력 # 7 8 # 1 2 # 1 3 # 1 4 # 1 5 # 2 6 # 2 7 # 5 6 # 6 7 NodeNum, EdgeNum = map(int, input().split()) MyMap = [[] for _ in range(Node..
재귀함수 팩토리얼 https://www.acmicpc.net/problem/10872 n = int(input()) def factorial(num): if num Sparse # 2) 2번 (n번) : From -> To # 3) 1번 (1~n-1번) : Sparse -> To n = int(input()) move = [] def hanoi(num, F, S, T): if num == 1: move.append([F, T]) else: hanoi(num-1, F, T, S) move.append([F, T]) hanoi(num-1, S, F, T) # hanoi(n, 'From', 'Sparse', 'To') hanoi(n, 1, 2, 3) print(len(move)) # 총 횟수 for m in ..
Stack Stack은 LIFO (Last In First Out)의 선형 자료 구조 push, pop python에서는 list를 통해 list.append(x), list.pop()으로 사용한다. push, overflow ## push stack = [] for now in range(1, 6): stack.append(now) print(stack) # [1, 2, 3, 4, 5] ## overflow, push stack = [0]*3 top = -1 for now in range(1, 6): top += 1 if top >= len(stack): print("overflow") break stack[top] = now print(stack) # overflow # [1, 2, 3] pop, u..
n이 입력되면 다음과 같은 삼각형을 출력하시오. 예) n이 5이면 * ** *** **** ***** def printStar(n): if n > 0: print('*', end='') printStar(n-1) else: return def recursive(n): if n > 0: recursive(n-1) # 3 2 1 printStar(n) # 1 2 3 print() # print('\n)을 하면 두 줄이 개행됨 else: return n = int(input()) recursive(n)
codeup.kr/problemsetsol.php?psid=21 문제집 / 재귀함수 codeup.kr 1901 : (재귀 함수) 1부터 n까지 출력하기 n = int(input()) def recursive(num): if num > 1: recursive(num-1) print(num) recursive(n) ## 출력 # 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 9 # 10 1902 : (재귀 함수) 1부터 n까지 역순으로 출력하기 n = int(input()) def recursive(num): print(num) if num > 1: recursive(num-1) recursive(n) 1904 : (재귀함수) 두 수 사이의 홀수 출력하기 a, b = map(int, input()..