새소식

PS/코드트리

[코드트리/삼성SW역량테스트] 나무 타이쿤 (Python)

  • -

Problem : 

 

Difficulty : Gold 5

 

Status : Solved

 

Time : 00:23:18

 


 

문제 설명 / 입력 및 출력

 

더보기

 

자세한 설명은 코드트리 사이트 링크를 참조해 주세요!

 

 


 

풀이

 

배열 업데이트 및 좌표 이동만 주의해서 구현하면 되는 간단한 문제 되시겠다. 별로 코멘트할 게 안 보이긴 한다...

 

풀이 코드

import sys
input = sys.stdin.readline

dr = [0, -1, -1, -1, 0, 1, 1 ,1]
dc = [1, 1, 0, -1, -1, -1, 0, 1]

n, m = map(int, input().split())
maps = [list(map(int, input().split())) for _ in range(n)]
medi = [[n-1, 0], [n-2, 0], [n-1, 1], [n-2, 1]]
visited = set()

def move_medi() :
    d, p = map(int, input().split())
    for i in range(len(medi)) :
        medi[i][0] = (medi[i][0] + dr[d-1]*p) % n
        medi[i][1] = (medi[i][1] + dc[d-1]*p) % n

def grow() :
    grow_h = list()
    for r, c in medi :
        maps[r][c] += 1
    for i, (r, c) in enumerate(medi) :
        cnt = 0
        for j in range(1, 8, 2) :
            ar, ac = r + dr[j], c + dc[j]
            if -1 < ar < n and -1 < ac < n and maps[ar][ac] :
                cnt += 1
        grow_h.append(cnt)

    for i, (r, c) in enumerate(medi) :
        maps[r][c] += grow_h[i]
        visited.add((r,c))

def make_new_medi() :
    global medi, visited
    medi = list()
    for i in range(n) :
        for j in range(n) :
            if maps[i][j] >= 2 and (i, j) not in visited :
                maps[i][j] -= 2
                medi.append([i, j])
    visited = set()


for _ in range(m) :
    move_medi()
    grow()
    make_new_medi()
print(sum(map(sum, maps)))

풀이 완료!

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.