백준 2588 곱셈

Yesol Lee·2022년 5월 30일
0

알고리즘

목록 보기
25/31
post-custom-banner

백준 2588 곱셈

문제

세 자리 정수 2개를 받아 한 자리씩 곱하는 과정에서 나오는 수를 전부 출력 (사진의 노란색 수 차례대로 출력)
세자리수곱셈
두번째 수를 자릿수별로 분리해 첫번째 수와 차례로 곱한 수를 출력하고, 마지막엔 입력된 두 수를 곱한 최종값을 출력한다.

코드

틀린 코드

a, b = int(input()), input()
print(*list(map(lambda x: int(x)*a, b)).reverse(), a*int(b))
  • 두번째 수에서 한 자리씩 가져와 앞 수와 곱하는 것을 lambda 를 이용해 처리했다.
  • 문자열에 lambda x를 적용할 경우 x는 문자 하나하나가 되는 것을 이용했다.
map(lambda x:print(x), 'abc') # a b c 출력
  • 그런데 map을 list로 바꾼 후 reverse()를 해서 *로 원소를 하나씩 출력하려고 하니 아래와 같은 에러가 떴다. 리스트를 reverse()했더니 iterable한 객체가 아닌 none을 반환해서 나는 에러였다.

    print() argument after * must be an iterable, not NoneType

리스트 거꾸로 반환하는 여러 가지 방법

Reverse Python Lists: Beyond .reverse() and reversed()

1. A.reverse()

  • 새로운 리스트 객체가 아닌 None 타입 반환 (실수하기 쉬움)
digits = [0, 1, 2, 3]
digits.reverse()

digits # [3, 2, 1, 0] 

2. reversed(A)

  • 기존 리스트를 반대방향으로 리턴.
  • 새로운 리스트를 만드는 것이 아니기 때문에 reversed() 한 리스트에 변경이 있으면 기존 리스트에 영향이 갈 수 있다.
  • 새로운 리스트를 만들고 싶으면 list(reversed(A)) 사용

3. 인덱스 slicing

  • 배열 인덱싱: A[start, end, step] step을 -1로 주면 역순 출력이 가능하다.
  • 보기에 깔끔하지만 reversed()가 실행시간이나 메모리 부분에서 유리하다고 함

최종 코드

a, b = int(input()), input()
print(*list(map(lambda x: int(x)*a, b))[::-1], a*int(b))
profile
문서화를 좋아하는 개발자
post-custom-banner

0개의 댓글