프로그래머스_Python_오답노트_True/False 연산 0,1 , or 특징 정리

HEE·2025년 4월 5일
0
post-thumbnail

정말 무식하고 성실한 방법과
true false or 의 특성으로 똑똑하게 푼 방법

1. 프로그래머스 python 코딩테스트 입문

Level 0. 배열 비교하기

이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다.

두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.
두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 arr2가 크다면 -1, arr1이 크다면 1, 두 배열이 같다면 0을 return 하는 solution 함수를 작성해 주세요.

정답 비교

1. 정말 성실한 나의 풀이

def solution(arr1, arr2):
    if len(arr1) == len(arr2):
        if sum(arr1) > sum(arr2):
            return 1
        elif sum(arr1) < sum(arr2):
            return -1
        return 0
    elif len(arr1) != len(arr2):
        if len(arr1) > len(arr2):
            return 1
        return -1
  • 길게 말할것도 없이 성실한 나의 풀이.
  • 문제 그대로 작성.

True/False/-/or 까지 모두 이용한 똑똑한 풀이

def solution(arr1, arr2):
(len(arr1) > len(arr2)) - (len(arr2) > len(arr1)) 
or (sum(arr1) > sum(arr2)) - (sum(arr2) > sum(arr1))

부분 잘라서 분석하기
**원래 파이썬은 비교연산자 결과를 True/False로 쓸 수 있다.
위의 답은 True/False에서 끝이 아니라 -를 사용하여, True 값이 1, False 값이 0 인것까지 생각하고 풀이한 것이며,
왼쪽 값이 0 인 경우, 오른쪽 값을 반드시 계산해야하는 or 의 특징을 이용해 길이가 같은 경우 합으로 비교했다.
또한 결국 0 or 0 이 나오면 false or false 라서 결국 false 즉 0이 나오는 파이썬 논리상 결과값이 0으로 반환되는것까지 생각하였다.

  • (len(arr1) > len(arr2)) - (len(arr2) > len(arr1)) :
  1. 길이를 비교하기.
  • (len(arr1) > len(arr2)) :
    arr1 이 더 길다면, True - 1
    arr1 이 더 짧다면, False - 0
  • (len(arr2) > len(arr1)) :
    arr2 가 더 길다면, True - 1
    arr2 가 더 짧다면, False - 0
  1. 길이 결과 빼기.
    (len(arr1) > len(arr2)) - (len(arr2) > len(arr1)) :
  • arr1 이 더 길다 : 1 - 0 = 1
  • arr2 이 더 길다 : 0 - 1 = -1
    arr1 = arr2 길이가 같다면 : 0 - 0 = 0

중요한건 OR 연산 연결

  1. OR
    왼쪽 값이 TRUE 이면 왼쪽값을 반환, 그렇지 않으면 오른쪽 값 반환.
    -> 숫자는 0은 FALSE로 평가되고, 0이 아닌 모든 수는 TRUE

    (따라서 길이가 다른 경우는 1, -1이기때문에 OR 연산이 무시됨)
  2. 길이가 같은 경우 (OR의 존재 이유)
    0 or (sum(arr1) > sum(arr2)) - (sum(arr2) > sum(arr1))
  • (sum(arr1) > sum(arr2))
    arr1 합이 더 크다면 , True - 1
    arr1 합이 작거나, 같다면, False - 0
  • (sum(arr2) > sum(arr1))
    arr2 합이 더 크다면 , True - 1
    arr2 합이 작거나, 같다면, False - 0
  1. 합 비교.
  • arr1 합이 더 크다 True - 1
  • arr2 합이 더 크다 False - -1
    arr1 = arr2 합이 동일하다면, 0 - 0 = 0
    배열의 합이 같다면, 0 or 0 즉 0이다.
profile
ALL IS WELL

0개의 댓글