프로그래밍-학습기록/코딩테스트

레벨 1 문제에서 찾은 작은 교훈

leesche 2021. 3. 1. 17:55

프로그래머스 | level 1 | Python | 내적

나의 풀이

def solution(a, b):
    answer = 0
    while a and b:
        answer += a.pop() * b.pop()
    return answer

처음 문제를 읽다가 내적에 링크가 걸려 있길래 들어갔더니 영어 위키 문서였다. 그래서 찬찬히 읽으려다가 수학 용어가 나오길래 바~로 한국어 문서를 찾았다.그랬더니 더욱 깊숙한 지식의 늪에 빠졌고 내 속에선 프로그래머스에 대한 배신감과 level 1 문제에서 조차 이렇게 고전하는 자신의 무력감 또한 느껴졌다. 하지만 알고보니 무척 쉬웠던 문제. 그냥 길이(심지어 길이가 같다고!)가 같은 리스트의 요소를 순서대로(심지어 순서대로!) 곱해서 합하면 끝이다.

허무하게 (몸 곳곳에 내적 개념이 질척하게 묻은 상태로) 문제를 풀고 다른 사람 풀이를 보니, 파이썬스럽게 푼 풀이들이 눈에 들어왔다. 그 중에 하나가 바로 이것.

def solution(a, b):
    return sum([x * y for x, y in zip(a, b)])

List Comprehension, zip, sum을 이용한 한 줄 코딩. 와! 근데 내적 때문에 별 감동이 없었다.

필요했거나 살펴봤던 개념

  • 미친 내적(문제에 있는 링크...^^, 심지어 영어다!)
    • 벡터 공간 위에서 내적은 내적 공간
    • 유클리드 공간 위 내적은 스칼라곱이다.
    • 뭔소린지 모르겠다. 수학자들은 대단하다.
    • 놀라운 건 이걸 몰라도 문제를 풀 수 있다는 것. 역시 level 1 짱

오늘의 교훈: 쫄지 말자. 일단 끝까지 읽어봐.