일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Kotlin
- LCS
- Python
- 안드로이드
- 앱
- 11054
- 최소공배수
- 6603
- permutation
- Android
- 11기
- 1260
- 1182
- Combination
- 11057
- 9095
- 나머지
- 뒤로가기
- 순열
- lcm
- expo
- 매일11시
- 11053
- 코테
- 홈화면
- 파이썬
- 괄호
- 코틀린
- 백준
- itertools
- Today
- Total
목록파이썬 (50)
황소개발자
역시 갓파이썬이죠 파이썬엔 itertools 란 모듈이 있습니다. 모르시는분 이제 알고 가세요. 화끈합니다. import itertools import sys def sol(): while True: s = sys.stdin.readline() if s.strip() == "0": return lst = list(map(int, s.split())) lst = lst[1:] lst = list(map(str, lst)) combi = list(map(' '.join, list(itertools.combinations(lst, 6)))) for numbers in combi: print(numbers) print() sol() 우선 윗 코드는 정답코드입니다. 그리고 permutations, combinat..
개떡같은 문제 import sys sys.setrecursionlimit(10000000) n, m = map(int, sys.stdin.readline().split()) adj = [[] for i in range(n + 1)] visited = [False] * (n + 1) for i in range(m): a, b = map(int, sys.stdin.readline().split()) adj[a].append(b) adj[b].append(a) def fake_dfs(v): visited[v] = True for i in adj[v]: if not(visited[i]): fake_dfs(i) count = 0 for i in range(1, n + 1): if not(visited[i]): c..
이 글에서는 dfs와 bfs의 개념을 설명하지 않습니다. dfs bfs 공부하시구 이 글봐주시면 '최적화' 라는 위대함에 알게됩니다. 오랜만에 복습겸 이 문제를 접하게되었는데, 계속 시간초과가 나는겁니다.. n, m, v = list(map(int, input().split())) adj = [[0 for i in range(n + 1)] for j in range(n + 1)] for i in range(m): a, b = map(int, input().split()) adj[a][b] = 1 adj[b][a] = 1 def dfs(v, hist, adj): hist.append(v) for i in range(1, n + 1): if i not in hist and adj[v][i]: hist = d..
https://hjp845.tistory.com/30 백준 1958 파이썬 python : LCS 3 @@황소처럼 우직하게@@ 처음엔 아래 코드와 같이, a b c 의 lcs 는 (a b 의 lcs) 와 (c) 의 lcs 이겠지 생각했으나 틀렸다. def lcs(a, b): dp = [[0 for i in range(len(a) + 1)] for j in range(len(b) + 1)] for i in range(1, len(b).. hjp845.tistory.com 이전 글에서 길이를 찾아내는 문제를 풀어보았다. 이번에는 부분문자열까지 찾아내는 솔루션을 제시한다. 이런 문제가 사이트에 있을진 모르겠지만, 충분히 나올 수 있는 문제다. lst = [input() for i in range(3)] dp ..
처음엔 아래 코드와 같이, a b c 의 lcs 는 (a b 의 lcs) 와 (c) 의 lcs 이겠지 생각했으나 틀렸다. def lcs(a, b): dp = [[0 for i in range(len(a) + 1)] for j in range(len(b) + 1)] for i in range(1, len(b) + 1): for j in range(1, len(a) + 1): if a[j - 1] == b[i - 1]: dp[i][j] = dp[i - 1][j - 1] + 1 else: dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) return findit(a, dp) def findit(a, dp): ans = '' now = dp[-1][-1] y = len(dp) - 1 ..
a = input() b = input() dp = [[0 for i in range(len(a) + 1)] for j in range(len(b) + 1)] for i in range(1, len(b) + 1): for j in range(1, len(a) + 1): if a[j - 1] == b[i - 1]: dp[i][j] = dp[i - 1][j - 1] + 1 else: dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) def findit(): ans = '' now = dp[-1][-1] y = len(dp) - 1 x = len(dp[0]) - 1 while now != 0: if dp[y][x - 1] == now - 1 and now - 1 == dp[y - 1..
n = int(input()) def sol(n): if n % 2 != 0: return 0 else: dp = [0] * (n + 1) dp[0] = 1 # 0줄인 경우는 아무것도 안하는 경우 하나이니까 dp[2] = 3 for i in range(4, n + 1): dp[i] = dp[i - 2] * 3 for j in range(i - 4, -1, -2): dp[i] += dp[j] * 2 return dp[n] print(sol(n)) 이런 타일 문제는요~ 길이가 1칸일 때, 생길 수 있는 경우의 수. 길이가 2칸일 때, 길이 1칸 경우의 수와 겹치지 않으며 생길 수 있는 경우의 수. 길이가 3칸일 때, 길이 1~2칸 경우의 수와 겹치지 않으며 생길 수 있는 경우의 수. 길이가 4칸일 때, 길이..
n = int(input()) lst = list(map(int, input().split())) dp_left = [1] * n dp_right = [1] * n for i in range(n): for j in range(i): if lst[j] < lst[i]: if dp_left[i] < dp_left[j] + 1: dp_left[i] = dp_left[j] + 1 for i in range(n - 1, -1, -1): for j in range(n - 1, i, -1): if lst[j] < lst[i]: if dp_right[i] < dp_right[j] + 1: dp_right[i] = dp_right[j] + 1 dp = [dp_left[i] + dp_right[i] for i in ran..