두 리스트의 값을 매칭하는 방법

Created by
  • 서경태
Created at
제목이 맞는지 모르겠지만 문제는 이렇다.
❓
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
absolutes = [4, 7, 12]
signs= [True, False, True]
일때 True는 양수, False는 음수를 나타낸다.
결과는 4 +(-7) + 12 = 9가 나온다.
처음 문제를 보고 어떻게 접근할지 고민이 많았다.
1.
역순으로 문제 풀기
사실 저 문제는 이미 어떤 정수들이 주어지고 그 정수를 거르고 걸러 만든 리스트가 아닌가. if n ≥ 0 이면 Ture, if < 0 이면 False인 것이다. 그러니 역순으로 올라가면 되는거지! 근데 if문을 어떻게 역으로 타고 올라가... 실패
2.
zip 함수를 사용한다.
zip함수는 두 리스트를 첫번째, 두번째, 세번째 끼리 짝지어줘서 튜플로 결과값을 내준다. signs 리스트의 True는 '+'로 False는 '-'로 바꾼후 zip으로 짝지은 후 어찌어찌 조건문을 걸고 변환해서 만들 수 있지 않을까? 했는데 문자열 '+'는 0으로 변환한다해도 문자열 '-'는 어떻게 처리할지 실마리를 찾지 못했다.
3.
GPT한테 물어봤다. (진짜 엄청 돌려돌려 물어봤다.)
🖥️
absolutes = [4, 7, 12]
signs = [True, False, True]
converted_signs = []
for i in signs:
if i:
converted_signs.append("+")
else:
converted_signs.append("-")
pair_list = []
for pair in zip(converted_signs, absolutes):
pair_list.append(list(pair))
print(pair)
print(pair_list)
zip 함수로 짝을 지어 정수 4, 17, 12 리스트를 만들고 싶다 했더니... 역시 찰떡 같이 알아듣고 True 일 때 + False일 때 -로 변환해서 숫자를 구해주었다.
🖥️
absolutes = [4, 7, 12]
signs = [True, False, True]
answer = []
for i in range(len(absolutes))
if signs[i]:
answer.append(absolutes[i])
else:
answer.append(-absolutes[i])
매치 시켜서 맞으면 변환하고 그걸 또 하고 하는 꽤나 긴 코드가 나올거라 생각했는데 의외로 간단했고 for 반복문의 힘을 다시 한 번 느꼈다.
리스트안에서 저렇게 매개변수를 사용하는것도 처음 봤다.
a.
반복문에서 i가 absolutes의 수만큼 돈다.
b.
signs안에서 i가 True면 answer에 absolutes 속 i를 추가한다.
c.
signs안에서 i가 False면 answer에 absolutes 속 -i를 추가한다.
이렇게 만들수 있다는게 너무 신기하다. 생각을 컴퓨터적으로 해야하는 것 같다.