Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 패스트캠퍼스혁펜하임
- 혁펜하임강의후기
- 반복문
- C++ 공백 입력
- C++
- 백준C++
- 조건문
- pytorch
- AI강의
- 백준1026
- cuDNN
- 1463
- precision
- C++ 함수
- tensorflow
- 백준9095
- c++ 기초
- 비교연산자
- 9095
- 백준1463
- C++ 백준
- 혁펜하임강의
- for문
- CUDA
- 백준
- AIDEEPDIVE
- 혁펜하임
- 혁펜하임AI
- 패스트캠퍼스
- 1로만들기
Archives
- Today
- Total
코딩하는 덕구 🐶
124. [삼성기출20]Python 백준 16235 번 나무 재테크(시간 초과) 본문
728x90
안녕하세요 코딩하는 덕구입니다.
백준 16235 번 나무 재테크 입니다.
python, pypy3시간 초과가 뜹니다. 여기서 어떻게 하면 시간을 단축 할 수 있을까요?
먼저 백준 16235 번 나무 재테크 시간초과 코드입니다. 설명은 아래에 있습니다.
from collections import deque
import sys
input = sys.stdin.readline
dx = [-1, -1, -1, 0, 0, 1, 1, 1]
dy = [-1, 0, 1, -1, 1, -1, 0, 1]
N, M, K = map(int, input().split())
board = [[5 for _ in range(N)] for _ in range(N)]
nutrition = [list(map(int, input().split())) for _ in range(N)]
trees = deque()
dead_trees = deque()
breeding = deque()
for _ in range(M):
x, y, z = map(int, input().split())
trees.append([x-1, y-1, z])
def spring():
for i in range(len(trees)):
x, y, age = trees.popleft()
if age <= board[x][y]:
board[x][y] -= age
age += 1
trees.append([x, y, age])
if age % 5 == 0:
breeding.append([x, y, age])
else:
dead_trees.append([x, y, age])
def summer():
while dead_trees:
x, y, age = dead_trees.pop()
board[x][y] += age//2
def fall():
while breeding:
x, y, _ = breeding.pop()
for i in range(8):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < N and 0 <= ny < N:
trees.appendleft([nx, ny, 1])
def winter():
for i in range(N):
for j in range(N):
board[i][j] += nutrition[i][j]
for _ in range(K):
spring()
summer()
fall()
winter()
print(len(trees))
문제 접근
단순한 구현문제 입니다.
문제에서 제시한 봄, 여름, 가을, 겨울을 구현하면 됩니다.
Python 코드 구현
코드를 구현하기 위해 필요한 변수들을 선언해줍니다.
from collections import deque
import sys
input = sys.stdin.readline
dx = [-1, -1, -1, 0, 0, 1, 1, 1]
dy = [-1, 0, 1, -1, 1, -1, 0, 1]
N, M, K = map(int, input().split())
board = [[5 for _ in range(N)] for _ in range(N)]
nutrition = [list(map(int, input().split())) for _ in range(N)]
trees = deque()
dead_trees = deque()
breeding = deque()
for _ in range(M):
x, y, z = map(int, input().split())
trees.append([x-1, y-1, z])
봄 : 양분이 있다면 나무의 나이를 증가시키고, 나이가 5의 배수라면 번식하는 나무에 추가합니다.
없다면 죽은 나무에 추가합니다.
def spring():
for i in range(len(trees)):
x, y, age = trees.popleft()
if age <= board[x][y]:
board[x][y] -= age
age += 1
trees.append([x, y, age])
if age % 5 == 0:
breeding.append([x, y, age])
else:
dead_trees.append([x, y, age])
여름 : 죽은 나무 리스트를 통해 양분을 추가해줍니다.
def summer():
while dead_trees:
x, y, age = dead_trees.pop()
board[x][y] += age//2
가을 : 번식 나무 리스트를 통해 나무들을 번식시켜줍니다.
def fall():
while breeding:
x, y, _ = breeding.pop()
for i in range(8):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < N and 0 <= ny < N:
trees.appendleft([nx, ny, 1])
겨울 : 로봇이 양분을 추가합니다.
def winter():
for i in range(N):
for j in range(N):
board[i][j] += nutrition[i][j]
구현이 완료된 후 함수들을 실행시켜 줍니다.
for _ in range(K):
spring()
summer()
fall()
winter()
print(len(trees))
파이썬 백준 16235 번 나무 재테크 최종 코드입니다.
from collections import deque
import sys
input = sys.stdin.readline
dx = [-1, -1, -1, 0, 0, 1, 1, 1]
dy = [-1, 0, 1, -1, 1, -1, 0, 1]
N, M, K = map(int, input().split())
board = [[5 for _ in range(N)] for _ in range(N)]
nutrition = [list(map(int, input().split())) for _ in range(N)]
trees = deque()
dead_trees = deque()
breeding = deque()
for _ in range(M):
x, y, z = map(int, input().split())
trees.append([x-1, y-1, z])
def spring():
for i in range(len(trees)):
x, y, age = trees.popleft()
if age <= board[x][y]:
board[x][y] -= age
age += 1
trees.append([x, y, age])
if age % 5 == 0:
breeding.append([x, y])
else:
dead_trees.append([x, y, age])
def summer():
while dead_trees:
x, y, age = dead_trees.pop()
board[x][y] += age//2
def fall():
while breeding:
x, y = breeding.pop()
for i in range(8):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < N and 0 <= ny < N:
trees.appendleft([nx, ny, 1])
def winter():
for i in range(N):
for j in range(N):
board[i][j] += nutrition[i][j]
for _ in range(K):
spring()
summer()
fall()
winter()
print(len(trees))
백준 16235 번 나무 재테크 시간초과 Python 코드였습니다.
감사합니다.
728x90
'알고리즘 문제 풀이' 카테고리의 다른 글
126. [삼성기출22]Python 백준 17144 번 미세먼지 안녕! (0) | 2023.06.12 |
---|---|
125. [삼성기출21]Python 백준 16236 번 아기상어 (0) | 2023.06.09 |
123. [삼성기출19]Python 백준 16234 번 인구 이동 자세한 설명 (0) | 2023.06.05 |
122. [삼성기출18]Python 백준 5373 번 큐빙 자세한 설명 (0) | 2023.05.31 |
121. [삼성기출17]Python 백준 15686 번 치킨 배달 자세한 설명 (0) | 2023.05.30 |