diff --git "a/\352\267\270\353\236\230\355\224\204/P1325_\355\232\250\354\234\250\354\240\201\354\235\270\355\225\264\355\202\271.py" "b/\352\267\270\353\236\230\355\224\204/P1325_\355\232\250\354\234\250\354\240\201\354\235\270\355\225\264\355\202\271.py" index 5edebdf..7b0f15f 100644 --- "a/\352\267\270\353\236\230\355\224\204/P1325_\355\232\250\354\234\250\354\240\201\354\235\270\355\225\264\355\202\271.py" +++ "b/\352\267\270\353\236\230\355\224\204/P1325_\355\232\250\354\234\250\354\240\201\354\235\270\355\225\264\355\202\271.py" @@ -7,6 +7,7 @@ def BFS(v): + visited = [False] * (N + 1) queue = deque() queue.append(v) visited[v] = True @@ -19,18 +20,14 @@ def BFS(v): queue.append(i) -for _ in range(M): +for i in range(M): S, E = map(int, input().split()) A[S].append(E) for i in range(1, N + 1): # 모든 노드에서 BFS 실행 - visited = [False] * (N + 1) BFS(i) -maxVal = 0 -for i in range(1, N + 1): - maxVal = max(maxVal, answer[i]) - +maxVal = max(answer) for i in range(1, N + 1): if maxVal == answer[i]: print(i, end=' ') diff --git "a/\352\267\270\353\236\230\355\224\204/P1916_\354\265\234\354\206\214\353\271\204\354\232\251\352\265\254\355\225\230\352\270\260.py" "b/\352\267\270\353\236\230\355\224\204/P1916_\354\265\234\354\206\214\353\271\204\354\232\251\352\265\254\355\225\230\352\270\260.py" index 0f22732..2e1dfc7 100644 --- "a/\352\267\270\353\236\230\355\224\204/P1916_\354\265\234\354\206\214\353\271\204\354\232\251\352\265\254\355\225\230\352\270\260.py" +++ "b/\352\267\270\353\236\230\355\224\204/P1916_\354\265\234\354\206\214\353\271\204\354\232\251\352\265\254\355\225\230\352\270\260.py" @@ -24,7 +24,7 @@ def dijkstra(start, end): if not visit[now]: visit[now] = True for n in myList[now]: - if not visit[n[0]] and dist[n[0]] > dist[now] + n[1]: + if dist[n[0]] > dist[now] + n[1]: dist[n[0]] = dist[now] + n[1] pq.put((dist[n[0]], n[0])) return dist[end] diff --git "a/\354\236\220\353\243\214\352\265\254\354\241\260/P17298_\354\230\244\355\201\260\354\210\230.py" "b/\354\236\220\353\243\214\352\265\254\354\241\260/P17298_\354\230\244\355\201\260\354\210\230.py" index 62d0594..1be10f2 100644 --- "a/\354\236\220\353\243\214\352\265\254\354\241\260/P17298_\354\230\244\355\201\260\354\210\230.py" +++ "b/\354\236\220\353\243\214\352\265\254\354\241\260/P17298_\354\230\244\355\201\260\354\210\230.py" @@ -1,3 +1,4 @@ +import sys n = int(input()) ans = [0] * n A = list(map(int, input().split())) @@ -9,7 +10,5 @@ myStack.append(i) while myStack: # 반복문을 다 돌고 나왔는데 스택이 비어 있지 않다면 빌 때까지 ans[myStack.pop()] = -1 #스 택에 쌓인 index에 -1을 넣기 -result ="" for i in range(n): - result += str(ans[i])+" " -print(result) + sys.stdout.write(str(ans[i]) + " ") diff --git "a/\354\236\220\353\243\214\352\265\254\354\241\260/P1874_\354\212\244\355\203\235\354\210\230\354\227\264.py" "b/\354\236\220\353\243\214\352\265\254\354\241\260/P1874_\354\212\244\355\203\235\354\210\230\354\227\264.py" index dfdf34c..5e73e58 100644 --- "a/\354\236\220\353\243\214\352\265\254\354\241\260/P1874_\354\212\244\355\203\235\354\210\230\354\227\264.py" +++ "b/\354\236\220\353\243\214\352\265\254\354\241\260/P1874_\354\212\244\355\203\235\354\210\230\354\227\264.py" @@ -1,30 +1,28 @@ -N = int(input()) +N = int(input()); A = [0]*N for i in range(N): - A[i] = int(input()) + A[i] = int(input()); stack = [] num = 1 result = True -answer = "" +answer = [] for i in range(N): su = A[i] - if su >= num: #현재 수열 값 >= 오름차순 자연수: 값이 같아질 때까지 push() 수행 + if su >= num: while su >= num: stack.append(num) - num += 1 - answer += "+\n" + num+=1 + answer.append('+') stack.pop() - answer += "-\n" - else: #현재 수열 값 < 오름차순 자연수: pop()을 수행해 수열 원소를 꺼냄 + answer.append('-') + else: n = stack.pop() - if n > su: #스택의 가장 위의 수가 만들어야 하는 수열의 수보다 크면 수열을 출력할 수 없음 + if n > su: print("NO") result = False break else: - answer += "-\n" + answer.append('-') if result: - print(answer) - - - + for i in answer: + print(i) diff --git "a/\354\240\225\353\240\254/P11004_K\353\262\210\354\247\270\354\210\230.py" "b/\354\240\225\353\240\254/P11004_K\353\262\210\354\247\270\354\210\230.py" index 60b7eec..76c6430 100644 --- "a/\354\240\225\353\240\254/P11004_K\353\262\210\354\247\270\354\210\230.py" +++ "b/\354\240\225\353\240\254/P11004_K\353\262\210\354\247\270\354\210\230.py" @@ -38,14 +38,16 @@ def partition(S, E): i = S + 1 j = E while i <= j: - while pivot < A[j] and j > 0: + while j >= S and pivot < A[j]: j = j - 1 - while pivot > A[i] and i < len(A)-1: + while i <= E and pivot > A[i] : i = i + 1 - if i <= j: + if i < j: swap(i, j) i = i + 1 j = j - 1 + else: + break # i == j 피벗의 값을 양쪽으로 분리한 가운데에 오도록 설정하기 A[S] = A[j] A[j] = pivot diff --git "a/\354\240\225\353\240\254/P1377_\353\262\204\353\270\224\354\206\214\355\212\2701.py" "b/\354\240\225\353\240\254/P1377_\353\262\204\353\270\224\354\240\225\353\240\2541.py" similarity index 95% rename from "\354\240\225\353\240\254/P1377_\353\262\204\353\270\224\354\206\214\355\212\2701.py" rename to "\354\240\225\353\240\254/P1377_\353\262\204\353\270\224\354\240\225\353\240\2541.py" index 406b09b..a4a0d93 100644 --- "a/\354\240\225\353\240\254/P1377_\353\262\204\353\270\224\354\206\214\355\212\2701.py" +++ "b/\354\240\225\353\240\254/P1377_\353\262\204\353\270\224\354\240\225\353\240\2541.py" @@ -10,4 +10,4 @@ for i in range(N): if Max < sorted_A[i][1] - i: # 정렬 전 index - 정렬 후 index 계산의 최댓값 저장하기 Max = sorted_A[i][1] - i -print(Max + 1) \ No newline at end of file +print(Max + 1) diff --git "a/\354\240\225\353\240\254/P1517_\353\262\204\353\270\224\354\206\214\355\212\2702.py" "b/\354\240\225\353\240\254/P1517_\353\262\204\353\270\224\354\240\225\353\240\2542.py" similarity index 100% rename from "\354\240\225\353\240\254/P1517_\353\262\204\353\270\224\354\206\214\355\212\2702.py" rename to "\354\240\225\353\240\254/P1517_\353\262\204\353\270\224\354\240\225\353\240\2542.py" diff --git "a/\355\203\220\354\203\211/P1206_DFS\354\231\200BFS.py" "b/\355\203\220\354\203\211/P1260_DFS\354\231\200BFS.py" similarity index 100% rename from "\355\203\220\354\203\211/P1206_DFS\354\231\200BFS.py" rename to "\355\203\220\354\203\211/P1260_DFS\354\231\200BFS.py" diff --git "a/\355\212\270\353\246\254/P11437_LCA.py" "b/\355\212\270\353\246\254/P11437_LCA.py" index d7029b1..168fc40 100644 --- "a/\355\212\270\353\246\254/P11437_LCA.py" +++ "b/\355\212\270\353\246\254/P11437_LCA.py" @@ -1,7 +1,5 @@ import sys -from collections import deque input = sys.stdin.readline -print = sys.stdout.write N = int(input()) tree = [[] for _ in range(N+1)] @@ -15,26 +13,17 @@ visited = [False]*(N+1) def BFS(node): - queue = deque() - queue.append(node) + queue = [node] visited[node] = True - level = 1 - now_size = 1 - count = 0 while queue: - now_node = queue.popleft() + now_node = queue.pop(0) for next in tree[now_node]: if not visited[next]: visited[next] = True queue.append(next) parent[next] = now_node # 부모 노드 저장 - depth[next] = level # 노드 depth 저장 - count += 1 - if count == now_size: - count = 0 - now_size = len(queue) - level += 1 - + depth[next] = depth[now_node]+1 # 노드 depth 저장 + BFS(1) def excuteLCA(a, b): @@ -53,10 +42,9 @@ def excuteLCA(a, b): return a M = int(input()) +mydict = dict() for _ in range(M): a, b = map(int, input().split()) - print(str(excuteLCA(a,b))) - print("\n") - - - + if not mydict.get((a, b), 0): #같은 질문일 경우 재계산을 하지 않기 위해 딕셔너리 자료형 사용 + mydict[(a, b)] = mydict[(b, a)] = excuteLCA(a, b) + print(mydict.get((a, b)))