코딩

[BOJ] 백준 29733 3차원 지뢰찾기 Python

척척석사아님 2023. 10. 28. 09:58
728x90
#29733
R,C,H= map(int,input().split())
box = []
for i in range (0,H):
    box_lev = []
    for j in range (0,R):
        a = list(input())
        box_lev.append(a)
    box.append(box_lev)

ans = [[[0 for _ in range (0,C)] for _ in range (0,R)] for _ in range (0,H)]
for i in range (0,H):
    for j in range (0,R):
        for k in range (0,C):
            if box[i][j][k] == "*":
                ans[i][j][k] = "*"
            else:
                cnt = 0
                for a in (-1,0,1):
                    for b in (-1,0,1):
                        for c in (-1,0,1):
                            x = i + a
                            y = j + b
                            z = k + c
                            if 0 <= x < H and 0 <= y < R and 0 <= z < C:
                                if box[x][y][z] == "*":
                                    cnt += 1
                ans[i][j][k] = cnt % 10

result = []
for i in range (0,H):
    for j in range (0,R):
        z = "".join(str(t) for t in ans[i][j])
        result.append(z)

for a in result:
    print(a)

정말 단순히,지뢰찾기의 원리에 따라서 진행했습니다.
한가지 귀찮았던 점은 한개의 정육면체가 최대 26개 (즉 3 x 3 x 3에서 본인 제외)의 정육면체와 맞닿아있을 수 있다고 한 점 같습니다.

처음에는 그냥 26개의 경우를 전부 나열해봐 ?!?!? 했다가
결국 그냥 for문 3번 쓰는것으로 하였습니다.
반복문이 계속되는 형태를 좋아하는 편은 아닌데, 어쩌다보니 이렇게 되어버렸네요.

참 간만의 포스팅입니다. 한동안 자소서 쓰느라 현생이 많이 바쁘군요 ... 그리고 석사 논문까지 ... 이게 여름방학이야 뭐야

좀만 더 힘내서 달려가봐야겠습니다.