컴퓨터 & 코딩/Python

[Python] Advent of Code 2022 - Day 4

구로그 2022. 12. 4. 20:46
728x90

매 라인마다 두 숫자 그룹(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 값을 받아왔다.  

 

Test if lists share any items in python

I want to check if any of the items in one list are present in another list. I can do it simply with the code below, but I suspect there might be a library function to do this. If not, is there a...

stackoverflow.com

 

반응형