Algorithm/Python

[백준 16235] 나무 재테크

🥭맹2 2021. 3. 16. 03:31
1. 문제

 

www.acmicpc.net/problem/16235

 

16235번: 나무 재테크

부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터

www.acmicpc.net

 

2. 접근방법

 

봄 -> 여름 -> 가을 -> 겨울 순으로 문제에 나온 대로 코드를 짜면 됩니다 ... 후 ...

 

하지만 여기에는 함정이 숨어있었슴다

 

바로바로바로바로바로 x, y 좌표가 반대라는 것 ...

 

r은 y좌표, c는 x좌표
나무 위치는 (x, y)

후 ... ~!

문제를 제대로 읽지 않은 나의 탓 ..

 

그래서 오늘의 교훈은 **문제를 꼼꼼히 읽자 ** 입니다.

 

3. 파이썬 코드

 

N, M, K = map(int, input().split()) # N : 땅의 크기 NXN // M : 나무의 개수
eats = [[5] * N for _ in range(N)] # 기존의 양분 양
add_eats = [list(map(int, input().split())) for _ in range(N)] # 겨울에 추가되는 양분의 양
trees = [[[] for _ in range(N)] for _ in range(N)]
for _ in range(M):
    x, y, z = map(int, input().split())
    trees[x-1][y-1].append(z)
# K년 후 나무의 개수 ?

for idx in range(K):
    # 봄, 여름
    for y in range(N):
        for x in range(N):
            if len(trees[y][x]) > 0:
                trees[y][x].sort()
                isDead = False
                for i in range(len(trees[y][x])):
                    if not isDead:
                        if eats[y][x] >= trees[y][x][i]:
                            eats[y][x] -= trees[y][x][i]
                            trees[y][x][i] += 1
                        else:
                            isDead = True
                            eats[y][x] += (trees[y][x][i] // 2)
                            trees[y][x][i] = 0
                    else:
                        eats[y][x] += (trees[y][x][i] // 2)
                        trees[y][x][i] = 0
    # 가을
    dir = [[1, 0], [0, 1], [-1, 0], [0, -1], [1, 1], [-1, -1], [1, -1], [-1, 1]]

    for y in range(N):
        for x in range(N):
            if len(trees[y][x]) > 0:
                trees[y][x].sort()
                while trees[y][x] and trees[y][x][0] == 0:
                    trees[y][x].pop(0)
                for i in range(len(trees[y][x])):
                    if trees[y][x][i] % 5 == 0:
                        for j in range(len(dir)):
                            tx = x + dir[j][0]
                            ty = y + dir[j][1]
                            if 0 <= tx < N and 0 <= ty < N:
                                trees[ty][tx].append(1)

    # 겨울
    for y in range(N):
        for x in range(N):
            eats[y][x] += add_eats[y][x]

answer = 0
for y in range(N):
    for x in range(N):
        answer += len(trees[y][x])

print(answer)

 

 

4. 마치며

 

x, y좌표를 제대로 캐치하지 못해 틀렸기 때문에

다음에는 요런 실수를 다시 하지 말자는 의미에서 바로 포스팅하러 달려왔습니당─=≡Σ ヘ( ´Д`)ノ

 

고럼 다시 달리러 바바이~!

'Algorithm > Python' 카테고리의 다른 글

[백준 2110] 공유기 설치  (0) 2021.03.31
[백준 1715] 카드 정렬하기  (0) 2021.03.26
[백준 2847] 게임을 만든 동준이  (2) 2021.03.05
[조합]  (0) 2021.03.04
[알고리즘] 순열  (0) 2021.02.07