본문 바로가기
알고리즘/koreatech

1111: 나무 쌓기 2

by cjw.git 2021. 3. 24.

Link : judge.koreatech.ac.kr/problem.php?id=1111


1. 문제

  • (초등학교에 입학한 한기대는 격차 모양의 마닥에 나무 쌓기 놀이를 하고 있습니다.
    나무를 바닥에 쌓으면서 놀던 기대는 문득 바닥에 놓여있는 나무의 보이는 면의 개수를 세기 시작했습니다.

    하지만 나무 블럭을 한칸 띄워서 두면 바닥 면을 제외하고 10개의 면을 볼 수 있게 되지요.더 많은 나무를 쌓아둔 기대는 스스로 보이는 면의 개수를 세기가 힘들어져서 당신에게 도움을 요청하려 합니다.)
  • 한기대를 도와서 바닥에 쌓인 나무 블록의 보이는 면이 몇 개인지를 출력하는 프로그램을 작성해 주세요.
  • 여기에 나무 블럭을 기존의 블럭에 맞닿게 붙여 넣으면 바닥 면을 제외하고 8개의 면을 볼 수 있게 됩니다.
  • 바닥에 하나의 나무 블록을 놓으면, 아래와 같이 바닥면을 제외하고 총 5개의 면을 볼 수 있습니다.

 


2. 문제의 조건

  • 1 <= X, Y <= 50
  • 0 <= n <= 100

 


더보기

3. 문제 접근

  • 아이디어

    제일 높은 층수를 구하고 1층부터 n층(제일 높은 층)까지 겹치는(맞닿는) 부분만 제외하면 됩니다. 1층부터 시작하므로 아랫층(바닥) 개수는 셀 필요가 없고 list의 범위가 벗어나는 경우는 맵 바깥에 있으므로 눈에 보이는 위치입니다. 또한 value는 최대 층수높이이므로 만약 world[y][x]가 level보다 작은경우는 이미 상자가 없는것이니 예외로 빼주셔야합니다.

 


4. 풀이 방법

  • 제일 높은층과 Y, X위치에있는 완전탬색을 시도합니다.
  • 해당 층에서 up right down left z_up 전부 자리가 있는지 확인하는 함수를 작성합니다.

 


5. 소스코드

 

 


예제 입력 설명 yundev.ga 님의 도움

cjw.git@gmail.com

'알고리즘 > koreatech' 카테고리의 다른 글

1041: 최소 이동거리 구하기 - 2차원  (0) 2021.03.02
1074: 유일한 수 두개  (0) 2021.01.23
1046: 빠른 길 찾기  (0) 2021.01.22
1043: 위성 사진  (0) 2021.01.21
1008: 순환 소수  (0) 2021.01.02

댓글