일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Android
- 앱
- 괄호
- 순열
- Kotlin
- 1260
- 9095
- expo
- 6603
- Combination
- 홈화면
- permutation
- 뒤로가기
- 최소공배수
- 파이썬
- 11057
- 매일11시
- 11053
- 11기
- 코틀린
- itertools
- Python
- 백준
- LCS
- lcm
- 코테
- 나머지
- 안드로이드
- 11054
- 1182
- Today
- Total
목록파이썬 (50)
황소개발자
( 괄호가 레이저를 만난 개수를 세면 되는데, 그리고 ) 와 만나 괄호가 닫힐 때, 지금까지 만난 (레이저 개수 + 1) 을 ans 에 더하면되고, 지금 까지 만난 괄호의 개수를 더 밑에 있는 막대기에게 알려주고 떠나가면 된다. ps = input().strip() ans = 0 stack = [0] for i in range(1, len(ps)): if ps[i] == '(': stack.append(0) elif ps[i] == ')': if stack[-1] == 0: if len(stack) >= 2: stack[-2] += 1 stack.pop() elif stack[-1] != 0: if len(stack) >= 2: stack[-2] += stack[-1] ans += stack[-1] + ..
외적이다. 도형의 넓이 구할 때, 선분이 교차하는지 확인할 때, 도형을 만들 때, 등등 다 쓰인다. dot = [] for i in range(3): dot.append(list(map(int, input().split()))) def ccw(p1, p2, p3): x1, y1 = p1 x2, y2 = p2 x3, y3 = p3 return (x1 * y2 + x2 * y3 + x3 * y1) - (x2 * y1 + x3 * y2 + x1 * y3) result = ccw(dot[0], dot[1], dot[2]) if result > 0: print(1) elif result < 0: print(-1) else: print(0) 요즘 애들은 이제 벡터를 안배운다던데, 참.. 필자 때 딱 행렬이 끊겨서...
999,999,999 하면 메모리에러 천만부터 느려지고 2억까지 가능 3억부터 메모리에러 백만까지 스무스하게 빠르게 생성 가능 100,000,000 (일억)이 381 MB 크기
입력이 들어오는 방식은 두가지 1. 문자열 import itertools a = '1234' print(list(map(''.join, itertools.permutations(a)))) ['1234', '1243', '1324', '1342', '1423', '1432', '2134', '2143', '2314', '2341', '2413', '2431', '3124', '3142', '3214', '3241', '3412', '3421', '4123', '4132', '4213', '4231', '4312', '4321'] 2. 숫자 배열 (문자 배열은 그냥 map(str, a) 없이 해주면 됨) import itertools a = [1, 2, 3, 4] print(list(itertools.per..
마치 이 뭔가 분열되어가며 답을 찾는 이 느낌. n = int(input()) B = list(map(int, input().split())) def go(x, b, A): b.remove(x) A.append(x) least_one = False if not b: return True if x * 2 in b: least_one = True return go(x * 2, b, A) if x % 3 == 0 and x // 3 in b: least_one = True return go(x // 3, b, A) if not least_one: return False for i in range(n): A = [] flag = go(B[i], B.copy(), A) if flag: print(*A) break..
간단간단하다구 원래 기본 BFS는 큐 한개로 구현이 되지. 이거는 시간을 고려해줘야 하기 때문에, (매초마다 1칸씩 없어지는) 큐 두개로 시간과 동기화 시켜줘야 해 ^^ 아래는 흔히 틀리는 반례야 (djm03178 님이 등록해주셨어) 23 5 10000000100010010000000 00011111001111111100100 n, k = map(int, input().split()) lst1 = input() lst2 = input() lst = [lst1, lst2] visited = [[0 for i in range(n)] for _ in range(2)] visited[0][0] = 1 def bfs(): q = [] q2 = [] q2.append([0, 0]) remove = 0 while q..
5 1000 입력했을 때, 11 2 가 나오는가? 안나온다면 중복을 해결하지 못한것이여. 그리고 n == k 일 때, 0 1 이 나와야혀. 코드는 다음과 같네 dp2 로 중복 개수를 헤아렷네. n, k = map(int, input().split()) if n == k: print(0) print(1) exit() dp = [-1] * 150001 dp2 = [1] * 150001 flag = False dist = -1 count = 0 dp[n] = 0 q = [n] q2 = [] while q: now = q.pop(0) if now + 1 = 0: if dp[now - 1] == dp[now] + 1: dp2[now - 1] += dp2[now] elif dp[now - 1] == -1: if n..
올바른 괄호가 되기위해서는 ( * * * * ) * * * * * * 이런식. 이 때, 첫번째 괄호를 1번째, 두번째 괄호를 k 번째라고하자. 그러면 괄호안에 쌓여진 공간의 개수는 k - 2 이고, 오른쪽에 공간의 개수는 n - k 개이다. dp[n] = dp[k - 2] * dp[n - k] (k = 2 ~ n) 이다. import sys input = sys.stdin.readline t = int(input()) lst = [] for _ in range(t): lst.append(int(input())) dp = [0] * 5001 dp[0] = 1 for i in range(2, 5001, 2): for j in range(2, i + 1, 2): dp[i] += (dp[j - 2] * dp[i..