일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- boj
- 모던 JavaScript 튜토리얼
- 투 포인터
- 세그먼트 트리
- 정렬
- 그리디
- 문자열
- Python
- 누적 합
- 슬라이딩 윈도우
- SSAFY
- 플로이드-워셜
- 수학
- 애드 혹
- JavaScript
- 이분 탐색
- 맵
- 해시 테이블
- 정수론
- 그래프
- 구현
- DFS
- DP
- BFS
- 에라토스테네스의 체
- 13164
- 2357
- 트리
- 브루트포스
- 싸피
- Today
- Total
목록알고리즘 (251)
흙금이네 블로그
아이디어 책의 무게를 더해 나가며 무게 합이 최대 무게 M을 넘으면 박스의 개수를 1 증가시킨다. 풀이 def solution(): N, M = map(int, input().split()) res = 0 if N > 0: boxes = tuple(map(int, input().split())) w = 0 res = 1 for i in range(N): temp = w+boxes[i] if temp > M: w = boxes[i] res += 1 else: w = temp print(res) solution()
아이디어 #1 덱을 이용하여 수를 지워 나간다. 풀이 #1 import sys from collections import deque input = sys.stdin.readline def solution(): T = int(input()) for t in range(T): p = input().rstrip() n = int(input()) x = deque(input().rstrip()[1:-1].split(',')) if n == 0: x.clear() r = False for c in p: if c == 'R': r = ~r else: if x: if r: x.pop() else: x.popleft() else: print('error') break else: if r: print(f"[{','.jo..
아이디어 A전봇대 위치 번호를 기준으로 전깃줄을 내림차순 정렬 후 B전봇대 위치 번호의 최장 감소 수열을 구한다. 이후 최장 감소 수열에 포함되지 않은 전깃줄의 A전봇대 위치 번호를 출력한다. 풀이 import sys input = sys.stdin.readline def solution(): N = int(input()) lines = sorted([tuple(map(int, input().split())) for _ in range(N)], reverse=True) LDS = [lines[0][1]] idx_list = [0]*N cnt = 1 for i in range(1, N): if lines[i][1] < LDS[-1]: LDS.append(lines[i][1]) idx_list[i] = cn..
아이디어 토네이도 이동 방향에 따른 변위 값과 이동 모래 비율들을 저장하고 토네이도를 구현한다. 풀이 import sys input = sys.stdin.readline delta = [(0, -1), (1, 0), (0, 1), (-1, 0)] move = [ [(-1, 0), (1, 0), (-1, -1), (1, -1), (-1, 1), (1, 1), (-2, 0), (2, 0), (0, -2)], [(0, -1), (0, 1), (1, -1), (1, 1), (-1, -1), (-1, 1), (0, -2), (0, 2), (2, 0)], [(-1, 0), (1, 0), (-1, 1), (1, 1), (-1, -1), (1, -1), (-2, 0), (2, 0), (0, 2)], [(0, -1), ..
아이디어 이분 탐색으로 최장 증가 부분 수열과 그 길이를 구한다. 풀이 def solution(): N = int(input()) A = tuple(map(int, input().split())) LIS = [A[0]] idx_list = [0]*N cnt = 1 for i in range(1, N): if A[i] > LIS[-1]: LIS.append(A[i]) idx_list[i] = cnt cnt += 1 else: s = 0 e = cnt-1 while s A[i]: e = m-1 elif LIS[m] < A[i]: s = m+1 else: LIS[m] = A[i] idx_list[i] = m break else: LIS[s] = A[i] idx_list[i] = s idx = cnt-1 for..
아이디어 이분 탐색으로 최장 증가 부분 수열의 길이를 구한다. 풀이 def solution(): n = int(input()) numbers = tuple(map(int, input().split())) LIS = [numbers[0]] cnt = 1 for i in range(1, n): if numbers[i] > LIS[-1]: LIS.append(numbers[i]) cnt += 1 else: s = 0 e = cnt-1 while s numbers[i]: e = m-1 elif LIS[m] < numbers[i]: s = m+1 else: LIS[m] = numbers[i] break else: LIS[s] = numbers[i] print(cnt) solution()
아이디어 회전 방법에 따라 원판을 회전한 후 원판에 적힌 수의 합을 구한다. 풀이 import sys input = sys.stdin.readline def solution(): N, M, T = map(int, input().split()) board = [list(map(int, input().split())) for _ in range(N)] cnt = N*M total = 0 for i in range(N): total += sum(board[i]) for t in range(T): x, d, k = map(int, input().split()) if d == 0: k = -k for i in range(x-1, N, x): board[i] = board[i][k:]+board[i][:k] tem..
아이디어 최소 비용으로 막대를 자르기 위해서는 막대 길이가 작은 것부터 잘라야 한다. 풀이 #1 sorted 함수 또는 sort 메서드를 이용하여 정렬한 후 비용을 계산한다. def solution(): n = int(input()) a = sorted(map(int, input().split())) total = sum(a) res = 0 for i in range(n-1): total -= a[i] res += a[i]*total print(res) solution() 풀이 #2 계수 정렬을 이용하여 정렬한 후 비용을 계산한다. def solution(): _ = int(input()) cnt_list = [0]*102 total = 0 for a in map(int, input().split()):..
아이디어 장신구를 만들 때 누적되는 피로도를 오름차순 정렬한 후, 피로도가 200 미만인 동안 장신구를 제작한다. 풀이 def solution(): P, N = map(int, input().split()) A = sorted(map(int, input().split())) res = 0 for a in A: if P < 200: P += a res += 1 else: break print(res) solution()
아이디어 완전 탐색으로 접근하되, 누적합을 이용하여 각 선거구의 인구 합을 빠르게 계산한다. 풀이 import sys input = sys.stdin.readline def solution(): N = int(input()) A = [list(map(int, input().split())) for _ in range(N)] total = 0 for i in range(N): for j in range(1, N): A[i][j] += A[i][j-1] A[i] = [0]+A[i] total += A[i][-1] res = total for r in range(N-2): for c in range(1, N-1): for d1 in range(1, min(N-r-1, c+1)): for d2 in range(..