[파이썬 코딩테스트] 레벨 1 : 음양 더하기

ch.2·2024년 7월 3일
0

코딩 테스트

목록 보기
5/21
post-thumbnail

문제

어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.

답안과 풀이

def solution(absolutes, signs):
    answer = 0
    for i in range(len(signs)):
        if signs[i] == True:
            answer += absolutes[i]
        else:
            answer -= absolutes[i]
    return answer
  • answer는 실제 정수들의 합을 담기 위한 변수로 설정했다.

  • absolutes와 signs의 요소 수가 같으니까, for 반복문은 더 적기 쉬운 signs의 수 만큼 반복하도록 했다. (absolutes로 적어도 결과는 같음)

  • signs의 요소가 True라면, 정수가 양수라는 뜻이므로 answer 변수에 그대로 더하고
    signs의 요소가 False라면, 정수가 음수라는 뜻으므로 answer 변수에서 빼도록 했다.

파이썬에서는 true, TRUE 다 안되고 True만 !! False만!!! 가능하다. 이번에도 실수해서 오류가 났으므로 계속 주의하자!


다른 사람의 풀이 1

def solution(absolutes, signs):
    for i in range (len(absolutes)):
        if signs[i] == False:
            absolutes[i] = -absolutes[i]
    return sum(absolutes)
  • signs가 False라면 absolutes를 -absolutes로 변환한 후, sum을 사용해 absolutes를 모두 더하는 식을 썼다.

다른 사람의 풀이 2

def solution(absolutes, signs):
    return sum(absolutes if sign else -absolutes for absolutes, sign in zip(absolutes, signs))
  • 한줄코딩
  • zip(): 동일한 개수로 이루어진 자료형을 묶어주는 함수이다.
a = ['one', 'two', 'three']
b = ['1', '2', '3']
list(zip(a, b))

→ [('one', '1'), ('two', '2'), ('three', '3')]

absolutes와 signs를 zip 함수를 이용해서 묶어주고 for 반복문을 사용했다.

  • sign은 signs의 요소를 뜻하는 변수명.
  • absolutes와 signs의 요소 수가 같고, 문제에서 요구하는 것도 요소의 수만큼 연산하면 되니까 가능한 코드.
profile
데이터 분석 공부중

0개의 댓글