일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 김영한
- properties 한글깨짐
- Hashtable
- linkedlist
- 인프런 김영한
- properties ??
- jsp
- java
- IntelliJ
- REST Docs
- api 문서
- 인프런 #김영한
- MVC 2편
- python
- whitelabel error page
- 자바
- 김영한 #DB1편
- 404
- 스프링MVC 1편
- spring boot
- 백준
- Spring
- map
- 스프링 DB 2편
- 단방향연결리스트
Archives
- Today
- Total
산업공학도의 IT
백준 15488 Python(해결) 본문
https://ie-mangchi.tistory.com/9
백준 15488번 Python (메모리초과ㅠ)
ㅇ 내가 생각한 알고리즘 - 현재 좌표 모음(xy_list)에서 하나씩 꺼내서 말을 이동 - 말의 이동이 성공하면 임시 공간(temp_list)에 넣어줌 - 이 과정을 xy_list의 요소 수 만큼 반복 - 반복하면 temp_list를
ie-mangchi.tistory.com
import sys
input = sys.stdin.readline
N,x,y,K = map(int,input().strip().split())
steps = [(-2, -1), (-1, -2), (1, -2), (2, -1) ,
(2, 1), (1, 2), (-1, 2), (-2, 1)]
xy_list = [[0 for j in range(N)] for i in range(N)]
xy_list[x-1][y-1] +=1
temp_list = [[0 for j in range(N)] for i in range(N)]
for _ in range(K):
for i in range(len(xy_list)):
for j in range(len(xy_list)):
if xy_list[i][j] != 0:
for k in range(xy_list[i][j]):
for step in steps:
row = i+1 + step[0]
col = j+1 + step[1]
if row >= 1 and row <=N and col >= 1 and col <= N:
temp_list[row-1][col-1] += 1
xy_list = temp_list
temp_list = [[0 for j in range(N)] for i in range(N)]
if K == 0:
print(1)
else:
c = 0
for i in range(N):
c += sum(xy_list[i])
print(c/8**K)
리스트의 크기가 커져 2차원 리스트를 초기화 하여 해보았지만 그래도 결과는 같았다.
ㅇ 메모리초과 원인(구글링 해봄)
- 2차원 리스트는 잘못사용하면 메모리문제가 발생할수가 있다고한다
ㅇ 해결방법
- 1차원 리스트를 2차원 리스트처럼 사용하였다.
- 몫과 나머지를 이용해서....
ㅇ 코드
import sys
input = sys.stdin.readline
N,x,y,K = map(int,input().strip().split())
steps = [(-2, -1), (-1, -2), (1, -2), (2, -1) ,
(2, 1), (1, 2), (-1, 2), (-2, 1)]
xy_list = [0] * (N * N)
xy_list[(x - 1) * N + (y - 1)] = 1
temp_list = [0] * (N * N)
for _ in range(K):
for i in range(N * N):
if xy_list[i] != 0:
for step in steps:
row = (i // N) + step[0]
col = (i % N) + step[1]
if row >= 0 and row < N and col >= 0 and col < N:
temp_list[row * N + col] += xy_list[i]
xy_list = temp_list
temp_list = [0] * (N * N)
if K == 0:
print(1)
else:
c = sum(xy_list)
print(c / 8**K)
'코테하는 공간 > Python' 카테고리의 다른 글
백준 15488번 Python (메모리초과ㅠ) (0) | 2023.03.10 |
---|---|
그리디 알고리즘 백준 1541번 Python (0) | 2023.03.06 |