반응형
문제
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
🐍파이썬
더보기
❌ MemoryError 실패 코드
from collections import deque
T = int(input())
for test_case in range(1, T + 1):
dx = [0, 1]
dy = [1, 0]
n = int(input())
flag = 0
grid = [[0]*(n+1) for _ in range(n+1)]
queue = deque()
queue.append((1, 1))
while queue:
x, y = queue.popleft()
for i in range(2):
nx = x + dx[i]
ny = y + dy[i]
if nx >= n+1 or ny >= n+1 or nx < 0 or ny < 0:
continue
if grid[nx][ny] != 0:
continue
grid[nx][ny] = grid[x][y] + 1
queue.append((nx, ny))
if nx * ny == n:
flag = 1
print(grid[nx][ny])
break
if flag == 1:
break
최소이동거리라는 말만 보고 BFS로 풀었더니 테스트케이스 #3 10000000019 에서 메모리 오류가 발생했다.
import math
T = int(input())
for test_case in range(1, T + 1):
n = int(input())
arr = []
for i in range(1, int(math.sqrt(n))+1):
if n % i == 0: #곱해서 n이 되는 두 수 찾기
arr.append((i, n//i))
for i, (x, y) in enumerate(arr): #index, (x, y)
arr[i] = (x-1)+(y-1) #배열의 각 인덱스에 (1, 1)->(x, y)까지 이동거리 저장
print("#{} {}".format(test_case, min(arr))) #최소값(최소거리) 출력
1️⃣ 곱해서 n이 되는 두 수를 찾아 배열에 넣는다.
2️⃣ (1,1)과 가장 가까운 위치의 두 수(x, y)를 찾아 이동거리를 출력한다.
반응형
'Problem Solving > SWEA' 카테고리의 다른 글
[SWEA|파이썬] 2805. 농작물 수확하기 (D3) (0) | 2023.05.08 |
---|---|
[SWEA|파이썬] 2806. N-Queen (D3) (1) | 2023.05.07 |
[SWEA|파이썬] 1208. [S/W 문제해결 기본] 1일차 - Flatten (D3) (0) | 2023.05.07 |
[SWEA|파이썬] 1244. [S/W 문제해결 응용] 2일차 - 최대 상금 (D3) (0) | 2023.05.07 |
[SWEA|파이썬] 1206. [S/W 문제해결 기본] 1일차 - View (D3) (0) | 2023.05.06 |
[SWEA|파이썬] 5215. 햄버거 다이어트 (D3) (0) | 2023.04.27 |