정말 무식하고 성실한 방법과
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))
:
- 길이를 비교하기.
(len(arr1) > len(arr2))
:
arr1
이 더 길다면,True
- 1
arr1
이 더 짧다면,False
- 0(len(arr2) > len(arr1))
:
arr2
가 더 길다면,True
- 1
arr2
가 더 짧다면,False
- 0
- 길이 결과 빼기.
(len(arr1) > len(arr2)) - (len(arr2) > len(arr1))
:
arr1
이 더 길다 : 1 - 0 = 1arr2
이 더 길다 : 0 - 1 = -1
arr1 = arr2
길이가 같다면 : 0 - 0 = 0
중요한건
OR
연산 연결
OR
왼쪽 값이 TRUE 이면 왼쪽값을 반환, 그렇지 않으면 오른쪽 값 반환.
-> 숫자는 0은 FALSE로 평가되고, 0이 아닌 모든 수는 TRUE
(따라서 길이가 다른 경우는 1, -1이기때문에 OR 연산이 무시됨)- 길이가 같은 경우 (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
- 합 비교.
arr1
합이 더 크다True
- 1arr2
합이 더 크다False
- -1
arr1 = arr2
합이 동일하다면, 0 - 0 = 0
배열의 합이 같다면,0 or 0
즉 0이다.