728x90
반응형

자료구조 31

[Baekjoon 5639 / python / 골드5] 이진 검색 트리

import sys sys.setrecursionlimit(10**9) # 재귀호출 최대 깊이를 늘려준다 pre = [] # 전위순회 순서 입력받기 while True: try: n = int(sys.stdin.readline()) pre.append(n) except: break def postOrder(nodeList): # 전위순회 결과를 입력받는다 생각지 말고, 그냥 노드 리스트를 입력받는다 생각하면 이해가 편함 if len(nodeList) == 0: # 빈 리스트라면 return return left, right = [], [] root = nodeList[0] # root노드 기준으로 작은값, 큰값으로 나눈다 for i in range(1, len(nodeList)): # root노드 다음값..

Algorithm/Graph 2024.03.29

[Baekjoon 1991 / python / 실버1] 트리 순회

import sys n = int(sys.stdin.readline()) tree = {} for _ in range(n): root, left, right = sys.stdin.readline().split() tree[root] = [left, right] # {'root' : ['left', 'right']} 형태로 저장한다 def preorder(root): # 전위 순회 if root != '.': print(root, end='') preorder(tree[root][0]) preorder(tree[root][1]) def inorder(root): # 중위 순회 if root != '.': inorder(tree[root][0]) print(root, end='') inorder(tree[r..

Algorithm/Graph 2024.03.29

[Baekjoon 1110 / python / 브론즈1] 더하기 사이클

n = input() if len(n) == 1: # n이 한자릿수 라면 앞에 0을 붙인다 n = '0' + n cnt = 0 # 횟수를 세는 변수 num = n while True: num = num[1] + str(int(num[0]) + int(num[1]))[-1] # 새로운 수 제작 cnt += 1 # 제작할 때마다 카운트 + 1 if num == n: # n과 같아지면 break break print(cnt) n으로 새로운 수를 제작하여, 몇 번 새로운 수를 만들어야 다시 n으로 돌아오는지 출력하는 문제이다. n은 1~99 의 범위에서 주어진다. 예를 들어 26이 주어졌다면, 26의 오른쪽 자리인 "6", 그리고 각 자리를 합한 수의 오른쪽 자리인 2+6="8" 두개를 더하여 "68"을 만들어..

Algorithm/문자열 2024.03.28

[Baekjoon 1992 / python / 실버1] 쿼드트리

n = int(input()) # 변의 길이 board = [list(map(int, input().rstrip())) for _ in range(n)] # rstrip() 하면 개행문자 제거해서 한번에 입력할 수 있게 해준다 def quadTree(x, y, n): # x, y좌표와 변 길이를 입력받는다, 첫 호출은 0,0을 입력 color = board[x][y] for i in range(x, x+n): for j in range(y, y+n): # 현재 사각형의 모든 칸을 검사한다 if color != board[i][j]: # 색깔이 다른 칸이 하나라도 있다면 4등분 재귀호출 한다 print('(', end='') # 출력 양식에 맞게 괄호 입력 quadTree(x, y, n//2) # 출력 양..

[Baekjoon 1182 / python / 실버2] 부분수열의 합

n, s = map(int, input().split()) # 숫자의 개수, 목표 숫자 numList = list(map(int, input().split())) # 숫자 리스트 number = [] # 계산에 사용할 리스트 cnt = 0 # 경우의 수 저장할 변수 def back(start): # 시작 인덱스 입력받기 global cnt if sum(number) == s and len(number) > 0: # 합이 s와 같고, 원소가 1개 이상일 때 ( 공집합 제외 해야 하니까 ) cnt += 1 # 찾았으니 경우의 수 + 1 for i in range(start, len(numList)): # 입력받은 인덱스부터, numList의 끝까지 진행한다 number.append(numList[i]) # ..

[Baekjoon 3190 / python / 골드4] 뱀

import sys from collections import deque n = int(sys.stdin.readline()) # 보드의 크기 k = int(sys.stdin.readline()) # 사과의 개수 apple = [list(map(int, sys.stdin.readline().split())) for _ in range(k)] # 사과의 위치 l = int(sys.stdin.readline()) # 방향 전환 횟수 change = [] for _ in range(l): changeSec, changeDir = input().split() changeSec = int(changeSec) change.append([changeSec, changeDir]) # 초, 방향을 입력받되, 초는 int..

[크래프톤 정글 5기] week01 알고리즘 주차 여섯번째 날, 해시 테이블, 힙, 우선순위 큐, 이진 트리, 피보나치

해시 테이블(Hash Table)- 먼저 키(key)와 값(value)으로 구성된 데이터가 필요하다.- 여기서 “key”를 해시값으로 만들어, 해당 해시값을 “인덱스”로써 활용하여 테이블에 저장한다. 여기서 해시값은 정수 형태가 된다.- 데이터(value)를 해시하여 인덱스로 쓰는 거 아니냐는 사람들이 있는데, 이럴 경우 value가 같으면 인덱스가 중복될 수 있다. 해시함수는 같은 입력에 대해서 항상 같은 해시값을 만들기 때문이다.- 어떤 값을 찾든 O(1)의 복잡도를 가진다. 고유값으로 접근하면 되기 때문.- 해시 테이블에서 만들어진 원소를 버킷(Bucket)이라고 한다. 해시 테이블의 장/단점- 장점 : 자료의 검색, 읽기, 저장 속도가 빠르다. 즉 데이터 조회가 빠르다.- 장점 : 자료가 중복되는..

[Baekjoon 11279 / python / 실버2] 최대 힙

import heapq as hq import sys n = int(input()) hqq = [] for _ in range(n): x = int(sys.stdin.readline()) if x >= 1: hq.heappush(hqq, -x) # hq는 최소힙만 지원하기 때문에, 최대힙 처럼 사용하기 위해 음수로 저장 else: # 음수로 저장하면 -가 붙으니, 가장 큰 값이 가장 위로 가게 된다 if len(hqq) == 0: print(0) else: print(abs(hq.heappop(hqq))) # 값을 꺼낼 땐 절댓값을 이용해 양수로 만든다 우선순위 큐가 사용된 문제다. 최대 힙으로 우선순위 큐를 구현하여 문제를 해결할 수 있다. 스택, 큐 문제처럼 문제 자체는 어렵지 않으나, 힙이라는 자료..

728x90
반응형