목록Python (64)
하루일문
풀이 # 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) # 체크된 리스트에 있는 숫자..
포인트 1. 상하좌우 이동 2. 이동 값 초기화 3. 땅을 판 뒤 판 땅도 초기화 4. 함수 나온 뒤도 초기화 5. k를 무조건 다 쓸 필요 없이 지금 땅 보다만 작으면 됨 풀이 # 상하좌우로 이동 dx = [1, -1, 0, 0] dy = [0, 0, 1, -1] # 함수 # 값을 가져올것 def dsf(I, J, K): # 글로벌에서 바꿔가면서 가져갈것 global MaX, visited # 멀리 갈 수록 높아지게 설정 MaX = max(MaX, visited[I][J]) # 상하 좌우로 이동하면서 본다 for im in range(4): mx = I + dx[im] my = J + dy[im] # 표 안에 있으면서 visited에서 이미 갔다는 표시가 없는곳 if 0 mountain[mx][my] ..
풀이 import sys, math n = int(sys.stdin.readline()) nums = [] for _ in range(n): num = int(sys.stdin.readline()) nums.append(num) # 오름차 정렬 s_n = sorted(nums) #평균 #round = 반올림 avg = round(sum(nums)/n) #중앙값 # math.ceil = 올림 mid = s_n[math.ceil(len(nums)//2)] #최빈값 #딕셔너리 생성 cnt = {} #딕셔너리에 넣고 있으면 카운트 for i in range(len(s_n)): if s_n[i] not in cnt: cnt[s_n[i]] = 1 else: cnt[s_n[i]] += 1 # value값이 value..
초기 코드 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]: # 이미 ..