def combine(n, k): results = [] def dfs(elements, start, k): if k==0: results.append(elements[:]) for i in range(start, n+1): elements.append(i) dfs(elements, i+1, k-1) elements.pop() dfs([], 1, k) return results N, M = map(int, input().split()) for i in combine(N, M): print(*i)
def permute(N, M): elements = [i for i in range(1, N+1)] results = [] prev_elements = [] def dfs(elements): if len(elements) == N-M: results.append(prev_elements[:]) for e in elements: next_elements = elements[:] next_elements.remove(e) prev_elements.append(e) dfs(next_elements) prev_elements.pop() dfs(elements) return results N, M = map(int, input().split()) for i in permute(N, M): print(*i) 기억..
브루트포스로 풀 걸 그래도 생각하는 과정이 할만했던 것 같다... top을 정의해서 top이 6, 16, 26 처럼 6이 한개이면 last6 = 1, 66, 266처럼 6이 2개이면 last6 = 2.. 이런식으로 커지고 top6가 1이라면 안에서 10번 loop를 돌아서 {top}66{i} 를 프린트 해준다. 6660부터 6669까지 프린트 할 수 있는 이유이다. 마찬가지로 top6가 2이라면 안에서 100번 loop를 돌아서 {top}6{i} 를 프린트 해준다. 66600부터 66699까지 프린트 할 수 있는 이유이다. 이런식으로 top6가 5일때까지 구해줬다. import sys N = int(sys.stdin.readline()) count = 1 top = 0 last6 = 0 while cou..
[문제] https://www.acmicpc.net/problem/14719 반례가!!!!!중요하다!!!!! 4 7 3 0 3 4 1 2 1 이러면 끝쪽에서 문제가 생긴다. # 자신보다 크거나 같은 레벨인거 찾고, 없다면 그나마 가장 큰 값인거 찾기 이게 해답에 가까워지는 방법..😇 코드 짜다가 자꾸 헤매서 정리 하기 위해서..! 블로그에서 되게 좋은 코드를 봤는데 영역에서 돌면서, 새로운 영역을 결정할 때 만약 더 높아서 해결이 딱 되면 리턴 해주고, 아니면 제일 큰 height을 계속 갱신을 해주는 방식을 쓰는데 되게 좋아 보였다. 함수로 짜지 않으면 return을 쓰지 못해서 못 짜는 구조였는데 엄청 잘 짰다..! https://gaza-anywhere-coding.tistory.com/113
# 1931 회의실 배정 import sys N = int(sys.stdin.readline()) arr = [] used = [] startTime = 0 endTime = 0 num = 0 for i in range(N): startAndEnd = list(map(int, sys.stdin.readline().split())) arr.append(startAndEnd) arr = sorted(arr, key=lambda x: (x[1], x[0])) while len(arr) > 0: popped = arr.pop(0) if popped[0] >= endTime: used.append(popped) startTime = popped[0] endTime = popped[1] num += 1 print(..
# 1655번 가운데를 말해요 import sys import heapq N = int(sys.stdin.readline()) list = [] max_heap = [] min_heap = [] for i in range(N): num = int(sys.stdin.readline()) if len(max_heap) == len(min_heap): # max 에다가 붙이기 heapq.heappush(max_heap, (-num, num)) else: # min 에다가 붙이기 heapq.heappush(min_heap, num) if len(max_heap) > 0 and len(min_heap) > 0: if max_heap[0][1] > min_heap[0]: # swap해주기 fromMax = heap..
# 1722 순열의 순서 # 10845 큐 N = int(input()) queue = [] for i in range(N): command = input() if command.__contains__("push"): queue.append(command[-1]) elif command.__contains__("pop"): if len(queue) != 0: val = queue.pop(0) print(val) else: print("-1") elif command.__contains__("size"): print(len(queue)) elif command.__contains__("empty"): if len(queue) == 0: print("1") else: print("0") elif comman..
# 2504 괄호의 값 str = input() # 맞는지 검증 stack = [] for index, char in enumerate(str): if char == '(': stack.append('(') elif char == '[': stack.append('[') elif char == ')': if len(stack) > 0: ret = stack.pop() if ret != '(': print("0") exit(0) else: print("0") exit(0) elif char == ']': if len(stack) > 0: ret = stack.pop() if ret != '[': print("0") exit(0) else: print("0") exit(0) if len(stack) !=0:..
import sys T = int(sys.stdin.readline()) for i in range(T): A, B = map(int, sys.stdin.readline().split()) # B를 2의 제곱으로 분리하기 binaryArrayForB = list(map(int, list(bin(B)[2:]))) binaryArrayForB.reverse() modularArrayForB = [0] * len(binaryArrayForB) # modular array 만들기 modularArrayForB[0] = A % 10 for j in range(1, len(binaryArrayForB)): modularArrayForB[j] = (modularArrayForB[j-1] ** 2) % 10 # pri..
# 9663번 N-Queen import sys N = int(sys.stdin.readline()) data = [[0]*N for _ in range(N)] count = 0 check_col = [0]*N check_diag = [0]*(2*N-1) check_diag2 = [0]*(2*N-1) def check(row, col): if check_col[col] == 1: return False elif check_diag[row+col]==1: return False elif check_diag2[row-col + (N-1)] == 1: return False else: return True def dfs(row): global count if row == N: count += 1 return ..
in Pypy # 2667번 단지번호붙이기 # BFS로 풀기 import sys N = int(sys.stdin.readline()) data = [] for _ in range(N): data.append([int(d) for d in str(sys.stdin.readline().rstrip())]) # print(data) queue = [] groupList = [] def bfs(row, col): queue.insert(0, [row, col]) while queue: current = queue.pop() newRow = current[0] newCol = current[1] # 이웃 찾기 for a in [-1, 1]: if 0
# 2606 바이러스 import sys nodes = int(sys.stdin.readline()) pairs = int(sys.stdin.readline()) node_set = set() adjacencyList = [[] for _ in range(nodes+1)] visitedList = [] for _ in range(pairs): a, b = map(int, sys.stdin.readline().split()) if a not in node_set: node_set.add(a) if b not in node_set: node_set.add(b) if a not in adjacencyList[b]: adjacencyList[b].append(a) if b not in adjacencyList[..
# 1780 종이의 갯수 import sys N = int(sys.stdin.readline()) data = [] for _ in range(N): data.append(list(map(int, sys.stdin.readline().split()))) # print(data) ans = {"-1": 0, "0": 0, "1": 0} def addOrDivide(row, col, N): value = data[row][col] for i in range(N): for j in range(N): if value != data[row + i][col + j]: # 하나라도 다른값이 나왔으면 쪼개준다 addOrDivide(row, col, N // 3) addOrDivide(row, col + N // 3, ..
# 11728 배열 합치기 import sys N, M = map(int, sys.stdin.readline().split()) A = list(map(int, sys.stdin.readline().split())) B = list(map(int, sys.stdin.readline().split())) appended = A + B appended.sort() print(*appended, sep= ' ') 이렇게 해서 풀긴 했는데 A, B는 이미 sort가 되어 있는 array라서 더 나은 방법이 있을 것 같았다. A, B 하나씩 가져와서 크기 비교하고 append해주면 될듯??
# 10816 숫자카드 2 import sys N = int(sys.stdin.readline()) cards = map(int, sys.stdin.readline().split()) dic = {} M = int(sys.stdin.readline()) data = map(int, sys.stdin.readline().split()) for i in cards: try: dic[i] += 1 except: dic[i] = 1 for j in data: try: print(dic[j], end = " ") except: print(0, end= " ")
# 10825 국영수 import sys N = int(sys.stdin.readline()) data = [] for i in range(N): name, 국어, 영어, 수학 = map(str, sys.stdin.readline().split()) 국어 = int(국어) 영어 = int(영어) 수학 = int(수학) data.append((name, 국어, 영어, 수학)) a = sorted(data, key=lambda x: (-x[1], x[2], -x[3], x[0])) for j in a: print(j[0])
import sys N, M = map(int, sys.stdin.readline().split()) # N: 나무의 수 # M: 집에 가져가려고 하는 나무 길이 data = list(map(int, sys.stdin.readline().split())) left = 1 right = max(data) while left = mid: count += i - mid else: count += 0 if count >= M: left = mid + 1 else: right = mid - 1 print(right) Binary Search로 풀면 된다.
알고리즘 시간에 다 배운건데 하나도 못짜겠어서 인터넷 보고 공부했다... 참고한 사이트 : velog.io/@i-zro/파이썬Python-코테-대비-DFSBFS-백준-1260번-DFS와-BFS 코드도 여기서가져옴!@!!!!! N,M,V=map(int,input().split()) matrix=[[0]*(N+1) for i in range(N+1)] for i in range(M): a,b = map(int,input().split()) matrix[a][b]=matrix[b][a]=1 visit_list=[0]*(N+1) def dfs(V): visit_list[V]=1 #방문한 점 1로 표시 print(V, end=' ') for i in range(1,N+1): if(visit_list[i]==0 a..
# 11650 좌표 정렬하기 import sys N = int(sys.stdin.readline()) arr = [] for i in range(N): m = sys.stdin.readline().split() m.reverse() arr.append(list(map(int, m))) arr.sort() for i in range(N): arr[i].reverse() print(f"{arr[i][0]} {arr[i][1]}")
timeout 당연히 날 줄 알았는데 안나네 ㄱㅇㄷ sort()최고!! # 11650 좌표 정렬하기 import sys N = int(sys.stdin.readline()) arr = [] for i in range(N): arr.append(list(map(int, sys.stdin.readline().split()))) arr.sort() for i in range(N): print(f"{arr[i][0]} {arr[i][1]}")
# 11722 가장 긴 감소하는 부분수열 import sys N = int(sys.stdin.readline()) arr = list(map(int, sys.stdin.readline().split())) nums = [1 for _ in range(N)] for i in range(N): v_max = 0 for j in range(0, i): if arr[j] > arr[i] and nums[j] > v_max: v_max = nums[j] nums[i] = v_max + 1 print(max(nums))
# 11726 2xn 타일링 import sys # import time # start = time.time() n = int(sys.stdin.readline()) arr = [0 for i in range(n + 1)] arr[1] = 1 if n > 1: arr[2] = 2 if n > 2: arr[3] = 3 if n > 3: for j in range(4, n + 1): arr[j] = arr[j - 1] + arr[j - 2] print(arr[n] % 10007) # print("time :", time.time() - start)
# 9095 1, 2, 3 더하기 import sys # import time T = int(sys.stdin.readline()) # start = time.time() for t in range(T): n = int(sys.stdin.readline()) arr = [0 for i in range(n + 1)] arr[1] = 1 if n>1: arr[2] = 2 if n>2: arr[3] = 4 if n > 3: for j in range(4, n + 1): arr[j] = arr[j - 1] + arr[j - 2] + arr[j - 3] print(arr[n]) # print("time :", time.time() - start)
# 11057 오르막수 import sys N = int(sys.stdin.readline()) arr = [[0 for _ in range(N+1)] for _ in range(11)] for i in range(1, 11): arr[i][1] = 1 for i in range(1, N+1): arr[0][i] = 1 for column in range(2, N+1): for row in range(1, 10): arr[row][column] = arr[row-1][column] + arr[row][column-1] sumV = 0 for row in range(0, 10): sumV += arr[row][N] print(sumV % 10007)