Link : judge.koreatech.ac.kr/problem.php?id=1111
Python
더보기
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | from sys import stdin def able_world(x, y, level, direction): try: # 범위가 벗어나면 1이고 해당 방향이 레벨보다 작으면 1이다. # 범위가 벗어나면 상자 바깥을 뜻하므로 1이고 # 해당 범위가 레벨보다 작으면 해당 층수엔 박스가 없다는 것이다. if direction == 0: # up if y - 1 < 0: #범위 체크 return 1 if world[y - 1][x] < level: # 레벨 체크 return 1 elif direction == 1: # right if x + 1 >= X: return 1 if world[y][x + 1] < level: return 1 elif direction == 2: # down if y + 1 >= Y: return 1 if world[y + 1][x] < level: return 1 elif direction == 3: # left if x - 1 < 0: return 1 if world[y][x - 1] < level: return 1 elif direction == 4: # z_up if world[y][x] == level: return 1 return 0 except IndexError: return 1 def counting(x, y, level): counter = 0 # 각 방향별로 탐색을 진행함 for i in range(5): counter += able_world(x, y, level, i) return counter X, Y = list(map(int, stdin.readline().strip().split())) world = [[_ for _ in list(map(int, stdin.readline().strip().split()))] for _ in range(Y)] z_size = 0 # 제일 높은 층수를 찾아주기 위해서 for _y in range(Y): for _x in range(X): if world[_y][_x] > z_size: z_size = world[_y][_x] result = 0 # n층 별로 확인하기 위해서 for i in range(1, z_size + 1): # 각 층마다 (x, y)를 완전탐색을 수행함. for _y in range(Y): for _x in range(X): # 만약 해당레벨층 아래일 경우 박스가 없는 경우이므로 제외한다. if world[_y][_x] >= i: result += counting(_x, _y, i) print(result) | cs |
FeedBack
cjw.git@gmail.com
'알고리즘 > 소스코드' 카테고리의 다른 글
PROGRAMMERS 72410: 신규 아이디 추천 (0) | 2021.03.24 |
---|---|
PROGRAMMERS 42628: 이중우선순위큐 (0) | 2021.03.24 |
KOREATECH 1041: 최소 이동거리 구하기 - 2차원 (0) | 2021.03.02 |
ALGOSPOT BOARDCOVER: 게임판 덮기 (0) | 2021.02.20 |
PROGRAMMERS 64062: 징검다리 건너기 (0) | 2021.01.25 |
댓글