1. 배열 Array 기본 자료형인 리스트를 배열처럼 사용합니다. 시간 복잡도 임의 접근 O(1) 삽입 / 삭제 O(N) 2. 스택 Stack 기본 자료형인 리스트를 스택처럼 사용합니다. stk = [] stk.append(x) #리스트의 맨 뒤에 요소를 삽입합니다. stk.pop() #리스트의 맨 뒤 요소를 반환하고 삭제합니다. (괄호 안을 비워뒀을 경우) 스택은 한 쪽에서만 데이터를 넣고 뺄 수 있는 자료구조입니다. 이러한 스택의 특징을 FILO(First-In-Last-Out) 또는 LIFO(Last-In-First-Out)라고 부릅니다. 시간 복잡도 삽입 / 삭제 O(1) 3. 덱 Deque 덱을 import해서 사용합니다. from collections import deque dq = deque..
# 팁 1 이 문제는 자료구조 맵을 이용하는 문제입니다. 파이썬에서 맵은 딕셔너리라는 자료형으로 구현하면 됩니다. 그렇게까지 까다로운 문제는 아니지만, 딕셔너리를 활용하는 방법을 잘 모른다면 조금 까다로울 수 있습니다. 따라서 이 문제를 푸는데에 도움이 되는 딕셔너리를 사용하는 몇 가지 팁을 정리해 보겠습니다. 첫 번째 팁은 '빈 딕셔너리를 생성하는 방법'입니다. 방법은 2가지 정도 있습니다. 방법 1. d = dict() 방법 2. d = {} 두 방법 모두 변수 d에 비어있는 딕셔너리가 담기게 됩니다. # 팁 2 두 번째 팁은, 딕셔너리에 담겨 있는 요소들의 value 값들 중 최댓값을 찾는 방법입니다. max_val = max(d.values()) # 팁 3 세 번째 팁은 딕셔너리에 있는 요소들을 ..
# 문제상황 1 시간 제한이 짧으므로 시간 단축을 위한 장치가 필요합니다. # 해결 1 import sys input = sys.stdin.readline 위와 같이 sys를 import하고 sys.stdin.readline() 함수를 이용해 사용자 입력을 받으면 시간을 단축할 수 있습니다. 매번 sys.stdin.readline()을 타이핑하기는 귀찮으니 input에 sys.stdin.readline을 할당하고 평소처럼 input을 사용합시다. # 문제상황 2 간단하게 생각해서 이 문제는 절댓값을 비교해서 가장 작은 값을 꺼내야 하므로, 우선순위 큐에 절댓값을 저장한다는 아이디어를 떠올릴 수 있습니다. 하지만 최종적으로 출력해야하는 값은 원본 값이므로 원본 값도 함께 알아야 합니다. 우선순위 큐에 절댓..
# 하노이 탑 원리 봉 3개를 각각 왼쪽에서부터 1번 봉, 2번 봉, 3번 봉이라고 하겠습니다. 우리의 목표는 1번 봉에 있는 원판들을 모두 3번 봉으로 옮기는 것입니다. 원판이 2개일 때를 살펴봅시다. 원판을 어떻게 움직여야 할까요? 1단계) 1번 봉에 있는 원판 하나를 2번 봉으로 옮깁니다. 2단계) 1번 봉에 있는 남은 원판 하나를 3번 봉으로 옮깁니다. 3단계) 2번 봉에 옮겨 놓았던 원판을 3번 봉으로 마저 옮깁니다. 이 세 단계가 하노이 탑 문제의 핵심입니다. 원판의 개수가 여기서 더 많아져도 모두 이 세 단계를 따릅니다. 원판이 3개인 경우를 살펴볼까요? 원판이 3개 이상일 때에도 원판이 2개 있다고 생각해야합니다. 원판이 어떻게 2개냐고요? 왼쪽 사진에서 제일 아래에 있는 원판 1개를 원판..
# 내 풀이 n = int(input()) l = [['' for i in range(n)] for i in range(n)] def blank(n, x, y): for i in range(n): for j in range(n): l[x-n//2+i][y-n//2+j] = ' ' def f(n, x, y): if n == 3: l[x-1][y-1] = '*' l[x-1][y+0] = '*' l[x-1][y+1] = '*' l[x+0][y-1] = '*' l[x+0][y+0] = ' ' l[x+0][y+1] = '*' l[x+1][y-1] = '*' l[x+1][y+0] = '*' l[x+1][y+1] = '*' else: f(n//3, x-n//3, y-n//3) f(n//3, x + 0, y-n//3)..