알고리즘 119

<백준> 1629번 파이썬 알고리즘 [분할정복]

import sys a, b, c = map(int, sys.stdin.readline().split()) def pow(a, b): if b == 1: return a % c tmp = pow(a, b // 2) if b % 2 == 0: return tmp * tmp % c else: return tmp * tmp * a % c print(pow(a, b)) 문제를 통해 시간을 줄일 수 있는 부분은 b!! a * a * a * a * a ..... 연속적이면 시간소모가 큼 따라서 나눠서 곱함(a, b = 5, 4 -> (5^2) * (5^2)) 완전 이진트리 모양으로 생각하면 편함

알고리즘 2021.11.12

<백준> 1780번 파이썬 알고리즘 [분할 정복]

import sys # N 입력 # n번 반복해서 리스트 채우기 # visit 비교 및 기준넘버와 비교 # 만약 다르다 => 나누기 n = int(sys.stdin.readline()) arr = [] res = [0] * 3 for i in range(n): arr.append(list(map(int, sys.stdin.readline().split()))) def check(start_x, start_y, n): tmp = arr[start_x][start_y] for i in range(n): for j in range(n): if tmp != arr[start_x + i][start_y + j]: return False return True def divide(start_x, start_y, n)..

알고리즘 2021.11.06

<백준> 18870번 파이썬 알고리즘 [딕셔너리]

import sys n = int(sys.stdin.readline()) # 이부분 잘 알아두기 arr = list(map(int, sys.stdin.readline().split())) arr2 = sorted(set(arr)) dic = {value: idx for idx, value in enumerate(arr2)} for value in arr: print(dic[value], end = " ") # 가장 작은 좌표는 0개 # 그 다음 1개 # ... 이런식 # 1. list에 담는다 # 2. 정렬 한다 # 3. set 에 담아서 중복 제거 # 4. 딕셔너리에 담아둔다 => key, value 순서를 바꿔야 문제 풀이에 맞다

알고리즘 2021.11.06

<백준> 11723번 파이썬 알고리즘[집합]

import sys n = int(sys.stdin.readline()) S = [] for _ in range(n): m, num = input().split() if m == 'add': S.append(int(num)) elif m == 'remove': S.remove(int(num)) elif m == 'check': if int(num) in S: print(1) else: print(0) elif m == 'toggle': if int(num) in S: S.remove(int(num)) else: S.append(int(num)) elif m == 'all': S = [i for i in range(1, 21)] elif m == 'empty': S = [] 이런식으로 배열로 하려했는데 오..

알고리즘 2021.11.03