매 라인마다 두 숫자 그룹(ex. 1-4, 6-10)이 있고, 한 숫자 그룹이 다른 숫자 그룹에 완전히 속해있는 경우(ex. 3-5, 1-10)가 총 몇 개 있는지 알아내는 문제.
Part One
file = open("input/day4.txt", "r")
data_list = file.read().splitlines()
pairs_list = []
# 1
for data in data_list:
list = data.split(",")
pairs_list.append(list)
temp_number_list = []
new_pairs_list = []
# 2
for pairs in pairs_list:
for pair in pairs:
number = pair.split("-")
temp_number_list.append(number)
if len(temp_number_list) == 2:
new_pairs_list.append(temp_number_list)
temp_number_list = []
count = 0
# 3
for pairs in new_pairs_list:
first, second = pairs[0], pairs[1]
first_range = range(int(first[0]), int(first[1]) + 1)
second_range = range(int(second[0]), int(second[1]) + 1)
first_list = [*first_range]
second_list = [*second_range]
# 4
if set(first_list).issubset(secnod_list) or set(secnod_list).issubset(first_list):
count += 1
print(count)
먼저 data_list 에 담긴 데이터를 보면 ["1-3,4-9", "5-19,3-4", ... ] 이런 식으로 생겼다.
# 1: 일단 리스트를 하나하나 돌며 콤마에서 분리해주고 분리한 걸 paris_list라는 새로운 리스트에 넣는다.
>> [["1-3", "4-9"], ["5-19", "3-4"], ... ]
# 2: 이번엔 데이터들을 "-" 마다 분리해서 그 리스트를 number라는 변수에 넣어준다음,
>> ['1', '3'], ['4', '9'], ['5', '19], ['3', '4'], ...
두 개 씩 짝을 묶어서 new_pairs_list에 넣어준다.
>> [ [ ['1', '3'], ['4', '9'] ], [ ['5', '19'], ['3', '4'] ] , [ [...], [...] ], .... ]
# 3: 이제 new_pairs_list를 돌면서 첫 번째, 두 번째 요소에 변수를 지정해준다.
>> first = ['1', '3']
>> second = ['4', '9']
first, second 리스트 인덱스를 활용하여 range 객체를 만들어 각각 first_range, second_range에 할당해준다.
>> first_range = range(1, 3+1)
>> second_range = range(4, 9+1)
이 때 리스트가 아닌 object로 들어가기 때문에 [*range] 를 하여 리스트로 변환해준다.
# 4: issubset() 을 활용하여 한 리스트가 다른 리스트에 포함이 되어 있는지, 있지 않은지 bool 값을 받아오고 만약 true를 리턴한다면 count를 1씩 늘려준다.
Part Two
이번엔 한 그룹이 다른 그룹에 속해 있는 게 아니라 겹쳐있는 경우는 총 몇 개 인지 구하는 문제였다.
if bool(set(first_list) & set(second_list)):
count += 1
part one과 나머지는 다 똑같고 # 4의 if 절만 바꿨다.
bool(set(a) & set(b)) 를 활용하여 두 리스트가 겹쳐있는지 안 겹쳐있는지 bool 값을 받아왔다.
'컴퓨터 & 코딩 > Python' 카테고리의 다른 글
[Python] Advent of Code 2022 - Day 6 (0) | 2022.12.06 |
---|---|
[Python] Advent of Code 2022 - Day 5 (0) | 2022.12.06 |
[Python] Advent of Code 2022 - Day 3 (0) | 2022.12.03 |
[Python] Advent of Code 2022 - Day 2 (0) | 2022.12.02 |
[Python] Advent of Code 2022 - Day 1 (0) | 2022.12.02 |