컴퓨터 & 코딩/Python

[Python] Advent of Code 2022 - Day 1

구로그 2022. 12. 2. 16:08
728x90

첫 번째 날 문제는, 

엄청 많은 숫자들이 적혀있는 파일을 갖고 

숫자들 한 묶음씩마다 합을 계산한다음 가장 큰 수를 골라내야 하는 것이었다. 

# 1
file = open("input/day1.txt", "r")
number_list = file.read().splitlines()

# 2
str_list = []
each_str_list = []

for number in number_list:
    each_str_list.append(number)
    if number == "":
        str_list.append(each_str_list)
        each_str_list = []

# 3
for list in str_list:
    if "" in list:
        list.remove("")

# 4
sum_list = []
sum = 0

for list in str_list:
    for number in list:
        sum += int(number)
    sum_list.append(sum)
    sum = 0

# 5
print(max(sum_list))

# 6
sum_list.sort()
print(sum_list[-1] + sum_list[-2] + sum_list[-3])

#1 먼저 파일을 열고 한 줄 씩 읽어서 하나의 리스트로 number_list라는 변수에 담아줬다. 

>> ["7", "9", "1", "23", "16", "", "3", "678", ... ] 

 

#2 데이터 타입을 확인해보니 string이 길래 일단 각각 묶인 숫자들을 담을 리스트변수 each_str_list와 그 리스트들을 담을 str_list 변수를 만들어주었고, 아까 담아둔 리스트 number_list를 for 문으로 하나하나 돌면서 each_str_list에 담아줬다. 각각 숫자 그룹은 빈 줄로 나눠지기 때문에 빈 줄이 나온다면 담아뒀던 each_str_list를 str_list에 담고 each_str_list는 다시 비어내어 새로운 숫자 그룹이 담길 수 있게 하였다.

>> [[1, 2, 3, 4, ""], [5, 6, 7, 8, ""], ... ] 

 

 

#3 그렇게 담보고니 각각 숫자 그룹들마다 빈 줄 ("") 이 함께 담겨서 str_list를 돌며 각 리스트 마다 있는 ""를 지웠다. 

>> [[1, 2, 3, 4], [5, 6, 7, 8], ... ] 

 

#4 이제 각 숫자그룹의 합을 담을 리스트 (sum_list) 와 합을 계산할 sum  변수를 만들어주고 str_list에 담겨 있는 숫자 그룹 리스트들을 돌며 그 숫자들(아직 string)을 int로 변환하여 sum에 더해주었다. 한 숫자 그룹의 합 계산이 끝나면 그 값을 sum_list에 담아주었고 sum은 다시 0을 만들어 새로운 숫자그룹의 합이 담길 수 있게 해주었다. 

>> [10, 26, 43, ... ]

 

#5  max() 함수를 사용하여 sum_list 중 가장 큰 값을 뽑아내면 첫 번째 퀴즈 값이 나온다!

 

#6 sort() 함수를 활용하여 리스트를 오름차순으로 정리해준 다음 인덱스값을 이용하여 마지막 세 값을 합해주면 두 번째 퀴즈 값이 나온다! 

 

 

 


작년 Advend of Code 때는 손도 못대서 가입만 하고 문제는 하나도 못 풀었는데

이번엔 손은 대볼 수 있게 되었다! 이게 아우스빌둥 4개월차의 힘인가...!!

 

하지만 어거지로 어찌어찌 푼 거라 뭔가 풀이과정에 쓸데 없는 게 많은 느낌이다. 

 다른 사람들이 푼 코드도 참고를 해야겠다. 

반응형