일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Docker 원리
- 최장공통부분수열
- LCS 알고리즘
- 모듈러 연산 분배법칙
- 다이나믹 프로그래밍
- 깊이 우선 탐색
- 동적 계획법
- 최장공통부분문자열
- 그래프 탐색
- 클래스
- 그래프탐색
- 파이썬
- 구현
- 그래프 이론
- dfs
- 배낭 문제
- db replication
- npm start
- lazy evaluation
- 수학
- 정처기 필기
- 문자열
- Container vs VM
- 너비 우선 탐색
- 일단 시도
- bfs
- Python
- 냅색 알고리즘
- error:0308010C:digital envelope routines::unsupported
- 나는 바보야...
- Today
- Total
목록분류 전체보기 (48)
Save my data
DP 문제이다. DP 문제는 반복의 맨 처음 단계에서 어떤 패턴을 찾으면 그 다음은 빠르게 풀린다. 그리고 항상 그걸 못 찾아서 문제다... 다만 확실히 DP 문제를 풀면 풀수록 뇌가 DP 화 되는 느낌이 있다. 나 같은 범재도 이런식으로 반복하면 그래도 요령이 생기는구나 싶어서 보람은 있었다. ※ 결국 노력과 반복이 답이다... 문제 풀이 아이디어 공유 : 줄 == 가로방향, 칸 == 세로방향 먼저 각 줄의 i 번째까지 누적합을 저장해 줄 dp 리스트를 만든다. 0 으로 마진을 두는게 편해서 인덱스 번호는 항상 1 부터 시작하게 만드는 편이다. 다른 사람들은 그렇게 안 한 사람도 있었다. 누적합의 패턴이 어떤지는 모르지만 여타 DP 문제가 그래왔듯 이번에도 비슷하겠거니 싶어서 일단 그렇게 만들었다. 2..
원본 리스트에서 j - i 회 만큼 pop 을 해준 것을 i 번째 원소 앞에 insert 해주었다. import sys N, M = map(int, sys.stdin.readline().split()) basket = [0] + [i for i in range(1, N + 1)] for _ in range(M): i, j = map(int, sys.stdin.readline().split()) cnt = j - i for k in range(1, cnt + 1): basket.insert(i, basket.pop(i + k)) print(*basket[1:]) 근데 이건 너무 꼬아서 생각한 풀이고, 사실 더 쉬운 방법은 그냥 reverse 함수같은걸로 뒤집은 다음 그 부분만 바꿔 주면 되는 문제였다. 아..
기본적인 LCS 알고리즘 문제이다. LCS 알고리즘에 대해서는 어떤 분이 굉장히 자세히 써 놓으셨는데, 새로 배우는 입장에서 굉장히 이해가 쉽도록 그림자료까지 첨부가 되어 있어서 이해하기가 좋았다. [알고리즘] 그림으로 알아보는 LCS 알고리즘 - Longest Common Substring와 Longest Common Subsequence LCS는 주로 최장 공통 부분수열(Longest Common Subsequence)을 말합니다만, 최장 공통 문자열(Longest Common Substring)을 말하기도 합니다. velog.io 나도 이번에 LCS 라는 알고리즘을 처음 보았는데 위 자료를 참고하여 풀었다. import sys S1 = sys.stdin.readline().strip() S2 = s..
다이나믹 프로그래밍 알고리즘을 활용하는 문제이다. DP 문제는 기초가 되는 점화식을 정확하게 세우면 문제가 쉽게 풀리는데, 계속 머릿속으로만 코드를 구성하려고 애쓰다보니 문제가 잘 안풀렸다. 대략적인 흐름을 dp[4] 정도까지만 노트에 써보면서 흐름을 파악하니 어느 정도 윤곽이 나오는 것을 보고, 잘 안풀리는 문제가 있으면 머리로 애쓸것이 아니라 노트에 써가면서 눈으로 흐름을 파악해야 된다는 것을 깨달았다. (나는 폰 노이만이 아니요) DP 문제에 대해 스스로 부족함을 많이 느끼고 있기 때문에 나 자신을 설명시킬 겸 최대한 상세하게 뜯어가면서 설명했다. 이번 문제에 대한 점화식의 유도 과정을 아래에 써보았다. 내가 현재 카드 한 개를 가지고 있다고 생각하는 것에서 출발해보자. 왜냐하면 한 개를 살 때의 ..
import sys N, K = map(int, sys.stdin.readline().split()) dp = [[0] * (K + 1) for _ in range(N + 1)] for i in range(1, N + 1): w, v = map(int, sys.stdin.readline().split()) for j in range(1, K + 1): if j >= w: # 1 dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w] + v) # 2 else: # 3 dp[i][j] = dp[i - 1][j] # 4 print(dp[N][K]) 코드를 보면서 적어놓는게 나중에 더 이해가 쉬울 것 같아서 코드블럭을 앞으로 빼 두었다. 만약 현재 내가 들 수 있는 무게가 j 일 때 ..
기초적인 이분 탐색 문제였다. 이분 탐색은 리스트가 정렬되어 있을 때 사용할 수 있는 탐색의 한 종류이다. import sys sys.stdin = open("10815.txt", 'r') N = int(sys.stdin.readline()) n = [*map(int, sys.stdin.readline().split())] M = int(sys.stdin.readline()) m = [*map(int, sys.stdin.readline().split())] n.sort() for i in m: start = 0 end = N - 1 mid = (start + end) // 2 while start n[mid]: start = mid + 1 mid = (start + end) // 2 else: print..
ㅓ간단한 DP 문제였다. 예전에 이것과 비슷한 문제 (피보나치수열로 진행되는 문제) 를 풀어 본 경험이 있었는데, 그것과 매우 비슷하다는 것을 금방 깨달았다. N = int(input()) dp = [0] * (N + 1) dp[1] = 1 if N > 1: dp[2] = 2 for i in range(3, N + 1): dp[i] = (dp[i - 1] + dp[i - 2]) % 15746 print(dp[N]) 다만 15746 으로 나누는 부분에서 메모리 초과 한 번, 인덱스 범위 정해 줄 때 오류 한 번 해서 총 두 번 오답이 나왔는데 인덱스 부분은 오류를 금방 찾았지만 15746 으로 나누는 부분을 늦게 떠올렸다. 신기하면서 이해가 잘 되지 않았던 점은 15746 으로 나눈 나머지를 dp 에 적용..
부제 : Django 에서 사전 설정을 하지 않으면 정적 파일을 처리하지 않는 이유 위의 질문에 대해 얘기하자면, Django 자체는 웹 서버가 아니고 웹 애플리케이션 프레임워크 이기 때문이다. Django 개발 환경에서 간소하게 웹 서버 처럼 동작시킬 수는 있지만, 보안 및 성능 이슈가 있을 수 있기 때문에 권장하지 않는다(라고 공식적으로 얘기하고 있다). 웹 서버와 웹 애플리케이션 서버의 차이를 알기 이전에, 필요한 지식인 정적 컨텐츠와 동적 컨텐츠의 차이에 대해 짚고 넘어가야 한다. 정적 페이지(Static pages) 와 동적 페이지 (Dynamic pages) 의 차이 정적 페이지 html, css, javascript, image 같은 컴퓨터에 저장되어있는 파일들 해당되는 요청이 올 때마다 미..