코딩테스트 연습 - 음양 더하기 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
제한 사항
absolutes의 길이는 1 이상 1,000 이하입니다.
absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
signs의 길이는 absolutes의 길이와 같습니다.
signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.
입출력 예
absolutes | signs | result |
[4, 7, 12] | [True,False,True] | 9 |
[1, 2, 3] | [False,False,True] | 0 |
풀이
아이디어: signs 요소의 값이 True인지 False인지 조건문으로 구분하고, 그에 따라 absolutes의 같은 인덱스 값에 알맞은 부호 붙이기
# 1
def solution(absolutes, signs):
for i in range(len(signs)):
if signs[i] == True:
absolutes[i] = absolutes[i]
else:
absolutes[i] = -absolutes[i]
return sum(absolutes)
-> range(len(signs))로 i의 범위를 signs 길이로 지정해 주고, signs 요소 하나하나에 접근하여 True인지 False인지 구분한다.
True면 해당 인덱스 번호의 absolutes 값을 양수로 만든다. 양수 이므로, 요소의 값 그대로 두고
False면 absolutes 값 앞에 - 를 붙여주고, absolutes를 모두 더한다.
# 2
def solution(absolutes, signs):
answer = 0
for i, j in zip(absolutes,signs):
if j:
answer += i
else:
answer -= i
return answer
-> 이번에는 zip() 함수를 이용해서 각각의 원소를 쌍으로 묶어 풀어보았다.
또한 그냥 if j 라는 조건문을 사용했는데, j가 True 혹은 False이므로 굳이 다른 조건을 두지 않더라도 알아서 if else문으로 나눠져서 들어갈 수 있다.
zip()
zip() 함수는 이터러블 객체를 인자로 받아,
각 객체가 담고 있는 원소를 차례대로 엮어서 튜플의 형태로 반환해준다.
이터레이터 형태로 반환되므로, list, tuple, dict 등의 함수를 사용해 주어야한다.
ex)
numbers = [1, 2, 3]
letters = ["A", "B", "C"]
for pair in zip(numbers, letters):
print(pair)
# 출력 :
(1, 'A') (2, 'B') (3, 'C')
'문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Lv.1] 수박수박수박수박수박수? (Python) (0) | 2024.07.10 |
---|---|
[프로그래머스 Lv.1] 없는 숫자 더하기 (Python) (0) | 2024.07.09 |
[프로그래머스 Lv.1] 나누어 떨어지는 숫자 배열 (Python) (0) | 2024.07.09 |
[프로그래머스 Lv.1] 서울에서 김서방 찾기 (Python) (0) | 2024.07.09 |
[프로그래머스 Lv.1] 콜라츠 추측 (Python) (0) | 2024.07.09 |