Part One
아주 지저분하게 풀어서 자신은 없지만 일단 풀이과정을 써본다.
이번 과제는 99x99의 숫자열이 있다.
각 숫자들은 나무의 키를 나타낸다. 이때 동서남북으로 얼마나 많은 나무가 보이는지 세는 문제이다.
동서남북으로 본인보다 키(숫자)가 크거나 같은 나무(숫자)가 있다면 보이지 않는다.
file = open("input/day8.txt", "r")
trees_list = file.read().splitlines()
tree_list = []
temp = []
# 1
for trees in trees_list:
for tree in trees:
temp.append(int(tree))
tree_list.append(temp)
temp = []
tree = None
left = []
right = []
top = []
bottom = []
info = []
# function
def check(tree, list):
global info
a = 0
for i in list:
if i >= tree:
a += 1
else:
pass
if a > 0:
info.append(False)
elif a == 0:
info.append(True)
sum = 0
# 2
for i in range(1, len(tree_list)-1):
for j in range(1, len(tree_list[0])-1):
tree = tree_list[i][j]
# 3
for left_trees in range(j):
left.append(tree_list[i][left_trees])
for right_trees in range(j+1, len(tree_list)):
right.append(tree_list[i][right_trees])
for top_trees in range(i):
top.append(tree_list[top_trees][j])
for bottom_trees in range(i+1, len(tree_list)):
bottom.append(tree_list[bottom_trees][j])
check(tree, top)
check(tree, right)
check(tree, bottom)
check(tree, left)
# 4
if True in info:
sum += 1
left = []
right = []
top = []
bottom = []
info = []
# 5
print(sum + 99 + 99 + 97 + 97)
# 1 먼저 숫자를 하나하나 따로 담아준다. 예를 들어, 파일을 읽어서 받아온 trees_list가 ["12345", "67890"]라면 [["1", "2", "3", "4", "5"], ["6", "7", "8", "9", "0"]] 이렇게 담아주는 것이다. 나중에 row, column으로 인덱스를 사용하기 위해 하는 과정이다.
# 2 for문으로 row, column에 해당하는 숫자를 돌아서 나무를 하나하나 잡아온다. 이때 가장자리 나무들은 카운트되지 않게 범위를 설정해준다. (가장자리 나무는 어차피 보이기 때문에 확인할 필요가 없다)
# 3 해당 나무의 동서남북 나무들을 각각 리스트에 담는다. 본인이나 가장자리가 포함이 되지 않게 범위를 설정한다. 그리고 미리 만들어둔 check 함수를 돈다. 각 방향의 리스트를 돌며 본인보다 큰 수가 있는지 확인하고 있다면 False(보이지 않음)을, 없다면 True(보임)을 info라는 리스트에 넣어준다. 예를 들어, [True, False, False, True] 라면 top, left 쪽에서는 해당 나무가 보인다는 뜻이다.
# 4 이렇게 함수를 다 돌아 info에 각 방향별 true, false 값이 모이면 true가 있는 경우 sum 에 1을 더해준다. 이는 총 몇 개의 나무가 보이는지 카운트하는 것이다. 더해준 다음에는 각 리스트를 비워주어 다음 차례가 올 수 있게 한다.
# 5 마지막으로 sum 값에 가장자리 나무의 개수를 더해주면 총 보이는 나무의 개수가 나온다.
Part Two는 나중에... ㅜㅜ
'컴퓨터 & 코딩 > Python' 카테고리의 다른 글
[Python] Advent of Code 2022 - Day 10 (0) | 2022.12.14 |
---|---|
[Python] Advent of Code 2022 - Day 9 (2) | 2022.12.14 |
[Python] Advent of Code 2022 - Day 7 (0) | 2022.12.08 |
[Python] Advent of Code 2022 - Day 6 (0) | 2022.12.06 |
[Python] Advent of Code 2022 - Day 5 (0) | 2022.12.06 |