알고리즘

알고리즘

<백준> 5430번 파이썬 알고리즘

import sys from collections import deque t = sys.stdin.readline() for _ in range(int(t)): f = sys.stdin.readline().rstrip() n = int(sys.stdin.readline()) arr = deque(sys.stdin.readline().rstrip()[1:-1].split(",")) if n == 0: if 'D' in f: print("error") continue else: print("[]") continue e = 0 # R 홀수 or 짝수 일때 경우 r = 0 for i in f: if i == "R": r += 1 else: if arr: if r % 2 == 0: #짝수일때 arr.popleft..

알고리즘

<리트코드> 561번 파이썬 알고리즘

def arrayPairSum(self, nums: List[int]) -> int: nums.sort() res = 0 for i in range(0, len(nums), 2): res += nums[i] return res

알고리즘

<리트코드> 42번 파이썬 알고리즘 [투 포인터]

def trap(self, height: List[int]) -> int: if not height: return 0 v = 0 l, r = 0, len(height) - 1 l_max, r_max = height[l], height[r] while l < r: l_max, r_max = max(l_max, height[l]), max(r_max, height[r]) if l_max 오른쪽 장벽은 왼쪽보다 크거나 같기 때문에 신경 안써도 되고 왼쪽의 최대만 신경써서 현재 높이만큼 뺀게 물이 찬다 이부분만 이해하면 될 것 같다

알고리즘

<백준> 2579번 파이썬 알고리즘 [동적 프로그래밍]

import sys n = int(sys.stdin.readline()) s = [0 for _ in range(301)] dp = [0 for _ in range(301)] for i in range(n): s[i] = int(input()) dp[0] = s[0] dp[1] = s[0] + s[1] dp[2] = max(s[0] + s[2], s[1] + s[2]) for i in range(3, n): dp[i] = max(dp[i - 3] + s[i - 1] + s[i], dp[i - 2] + s[i]) print(dp[n - 1]) dp에 i - 3 부분이 있으므로 0, 1, 2 까지는 직접 계산해준다

알고리즘

<백준> 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)) 완전 이진트리 모양으로 생각하면 편함

알고리즘

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

import sys n = int(sys.stdin.readline()) arr = [] for _ in range(n): arr.append(list(map(int, input()))) def divide(x, y, n): check = arr[x][y] for i in range(x, x + n): for j in range(y, y + n): if check != arr[i][j]: check = -1 break if check == -1: print('(', end="") n = n//2 divide(x, y, n) divide(x, y + n, n) divide(x + n, y, n) divide(x + n, y + n, n) print(')',end="") elif check == 0: pri..

알고리즘

<백준> 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)..

알고리즘

<백준> 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 순서를 바꿔야 문제 풀이에 맞다

알고리즘

<백준> 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 = [] 이런식으로 배열로 하려했는데 오..

알고리즘

<백준> 11279번 파이썬 알고리즘 [최대 힙]

import sys import heapq n = int(sys.stdin.readline()) max_arr = [] for i in range(n): x = int(sys.stdin.readline()) if x > 0 and int(x): heapq.heappush(max_arr, -x) elif x == 0: if max_arr: print(-heapq.heappop(max_arr)) else: print(0)

changha.
'알고리즘' 카테고리의 글 목록 (7 Page)