일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 브루트포스
- 해시 테이블
- 애드 혹
- BFS
- 플로이드-워셜
- JavaScript
- DP
- 2357
- 싸피
- 누적 합
- 세그먼트 트리
- 맵
- 정수론
- 슬라이딩 윈도우
- 문자열
- 그래프
- 13164
- 투 포인터
- DFS
- 구현
- 이분 탐색
- 그리디
- 정렬
- 모던 JavaScript 튜토리얼
- Python
- boj
- 에라토스테네스의 체
- 트리
- SSAFY
- 수학
- Today
- Total
목록분류 전체보기 (271)
흙금이네 블로그
아이디어 수열 A를 기준으로 수열 B의 인덱스를 정렬한 후 인덱스의 최장 증가 수열의 길이를 구한다. 풀이 def solution(): N = int(input()) A = tuple(map(int, input().split())) B = tuple(map(int, input().split())) idx_list_B = [0]*N for i in range(N): idx_list_B[B[i]-1] = i idx_list = [0]*N for i in range(N): idx_list[i] = idx_list_B[A[i]-1] LIS = [idx_list[0]] res = 1 for i in range(1, N): if idx_list[i] > LIS[-1]: LIS.append(idx_list[i]) i..
아이디어 각 칸에서 획득하는 점수를 계산한 후 주사위가 이동할 때마다 주사위 상태를 변경하며 점수를 더해 나간다. 풀이 import sys input = sys.stdin.readline delta = [(0, 1), (1, 0), (0, -1), (-1, 0)] turned = [ (3, 1, 0, 5, 4, 2), (1, 5, 2, 3, 0, 4), (2, 1, 5, 0, 4, 3), (4, 0, 2, 3, 5, 1) ] def solution(): N, M, K = map(int, input().split()) board = [tuple(map(int, input().split())) for _ in range(N)] scores = [[0]*M for _ in range(N)] for i in r..
아이디어 책의 무게를 더해 나가며 무게 합이 최대 무게 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()):..