[프로그래머스] Lv.0 배열 두 배로 만들기 풀이

Jiumn·2022년 12월 1일
0
post-thumbnail

[프로그래머스] Lv.0 배열 두 배로 만들기 풀이

문제 설명

정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.

제한사항

-10,000 ≤ numbers의 원소 ≤ 10,000
1 ≤ numbers의 길이 ≤ 1,000

입출력 예 설명

입출력 예 #1

  • [1, 2, 3, 4, 5]의 각 원소에 두배를 한 배열 [2, 4, 6, 8, 10]을 return합니다.

입출력 예 #2

  • [1, 2, 100, -99, 1, 2, 3]의 각 원소에 두배를 한 배열 [2, 4, 200, -198, 2, 4, 6]을 return합니다.

풀이

[나의 답안] (1트)

def solution(numbers):
    result = []
    n = len(numbers)
    for i in range(n):
        result += numbers[i] * 2
    return result

배열 안의 요소를 반복문으로 하나씩 꺼낸 다음 2배로 만들고 다시 리스트에 넣으려고 했다.
그런데 또 에러가 발생한다. (하...)

왜 그럴까?

result는 배열이기 때문에 +=를 이용해 리스트에 바로 요소를 더할 수 없다.
리스트 안에 요소를 추가해주는 함수를 이용해야 한다.

[수정 답안] (2트)

def solution(numbers):
    result = []
    n = len(numbers)
    for i in range(n):
        result.append(numbers[i] * 2)
    return result
  • result = []: 최종적으로 반환할 값(result)를 빈 리스트 형태로 선언
  • for i in range(n): range() 함수를 사용해서 numbers 리스트의 길이만큼 반복한다. 이때 range()의 인수는 정수만 가능하다. (i는 0부터 시작해서 n 미만의 정수까지다.)
  • result.append(numbers[i] * 2): 리스트 안에 원소를 추가하는 것은 .append() 함수를 이용해야 한다.
  • return result: result를 반환할 때는 들여쓰기에 주의해야 한다.
def solution(numbers):
    result = []
    n = len(numbers)
    for i in range(n):
        result.append(numbers[i] * 2)
        # 잘못된 들여쓰기
    	return result 

위와 같이 return을 바로 윗줄의 표현식과 맞추면 계산을 한번만 하고 나오기 때문에 반드시 for와 들여쓰기를 맞춰줘야 한다.

[다른 답안]

def solution(numbers):
    return [num*2 for num in numbers]

답을 제출하고 다른 분의 풀이를 봤는데, '와... 이렇게 간단하게 풀 수 있구나' 하고 벙쪘다. 리스트 컴프리헨션(list comprehension)으로 푼 방법이다.

profile
Back-End Wep Developer. 꾸준함이 능력이다.

0개의 댓글