목록백준 (73)
하루일문
풀이 # DFS def dfs(grap, v, visit): # 지금 들린곳 체크 visit[v] = True # 들린곳 순서에 따라 프린트 DFS.append(v) # 작은 것부터 우선해서 들여 for i in sorted(grap[v]): # 안 들렸다면 들려 if not visit[i]: dfs(grap, i, visited) # BFS from collections import deque def bfs(grap, v, visit): # 덱처리 queue = deque([v]) # 방문 체크 visit[v] = True while queue: # 리스트에 맨 앞쪽 체크, 제거 n = queue.popleft() # 체크한 부분 순서에따라 프린트 BFS.append(n) # 체크된 리스트에 있는 숫자..
초기 코드 nums = [] import heapq, sys for _ in range(int(sys.stdin.readline())): nums.append(int(sys.stdin.readline())) heapq.heapify(nums) for _ in range(len(nums)): print(heapq.heappop(nums)) 오류 메모리 오류 처음 봐서 당황했다 수정 방법 메모리를 위해서 sys.stdin.readline() 필수 append 사용 금지 수정 코드 import sys n = int(sys.stdin.readline()) # 최대 숫자까지 저장 arr = [0] * 10000 for _ in range(n): num = int(sys.stdin.readline()) 같은 수가 ..
문제 포인트 수를 정렬하는 것 자체는 크게 어렵지 않지만, 시간 복잡도 때문에 시간 오류가 잘 뜨는 문제 같다. 풀이 코드 # 정렬을 위해 heaqp import heapq nums = [] for _ in range(int(input())): nums.append(int(input())) # 정렬을 해주고 시작 heapq.heapify(nums) for _ in range(len(nums)): # 작은 것부터 제거하면서 print print(heapq.heappop(nums)) 해결 방법 시간 복잡도를 고려하려고 해도 내가 쓴 코드도 시간초과가 발생했다. 제출을 python 보다 빠른 pypy3로 제출하니 성공할 수 있었다. 찾아보니 백준은 python 시간에 좀 박한 편이라고 하니 참고해야 할 것 같다.
풀이 nums = [list(map(int, input().split())) for _ in range(9)] max_num = -1 for i in range(9): for j in range(9): if nums[i][j] > max_num: max_num = nums[i][j] m_i = i + 1 m_j = j + 1 print(max_num) print(m_i, m_j) 런타임 에러 후 해결 방법 max_num = 0를 했더니 런타임 오류가 났었다. 문제를 다시 읽어보니 0이 포함된다고 써져있었고, 반례로도 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ..
풀이 N, M = map(int, input().split()) A = [list(map(int, input().split())) for _ in range(N)] B = [list(map(int, input().split())) for _ in range(N)] for i in range(N): for j in range(M): A[i][j] += B[i][j] print(*A[i]) 해설 이중리스트로 받아서 위치에 맞게 더하고 행마다 출력
풀이 # 시간오류를 막기위해 먼저 리스트로 묶음 sosu = [] for i in range(2, 10000): for j in range(2, int(i**0.5)+1): if i % j == 0: break else: sosu.append(i) for _ in range(int(input())): n = int(input()) # n을 절반으로 나눔 for i in range(len(sosu)): if n // 2 == sosu[i]: break if n // 2 < sosu[i]: i -= 1 break # 범위를 넣을려면 for이 while보다 편할 것같아서 break 나올 수 있는 변수를 넣음 stop = 0 # 중간부터 작아지는 수 for num_1 in sosu[i : : -1]: # 이미 ..
풀이 1 square = [] for _ in range(4): x_1, y_1, x_2, y_2 = map(int, input().split()) # 네모 안의 면적 = 1 당 점 1개를 찍는다 # y_2 + 1이 아닌 이유? 면적 당 1이니 오버한 숫자가 나오기 때문 for i in range(y_1, y_2): for j in range(x_1, x_2): square.append((i, j)) # set으로 중복값 제거 square = set(square) print(len(square)) 전에 풀었던 풀이이다. 새로 풀었는데도 똑같이 풀어서 다른 방식으로 풀어봤다. 풀이 2 # 모눈종이를 먼저 그린다 arr = [[0] * 100 for _ in range(100)] cnt = 0 for _ i..
처음만든 코드 시간 초과가 날 것 같아 채점 전에 갈아 엎었고나서 저장을 안했다는걸 알아 없다. 오류 시간초과 수정코드 sosu = [] # 정해진 범위 안에 소수를 모으기로 했다 for num in range(2, 247000): for N in range(2, int(num ** 0.5) + 1): if num % N == 0: break else: sosu.append(num) # 입력에 따른 소수의 객수 찾기 while True: n = int(input()) if n == 0: break cnt = 0 for i in sosu: if n < i