안녕하세요! 오늘은 나누어 떨어지는 숫자 배열 문제를 풀어보겠습니다.
쉬운 문제지만 논리 연산자와 자료형 별 Bool값에 대해 공부할 수 있는 문제라서 가져왔습니다.
모든 문제의 저작권은 프로그래머스에게 있음을 밝힙니다.
목차
- 문제 설명
- 풀이 과정
1. 문제 설명
문제는 간단합니다.
arr를 탐색하며 divisor로 나누어 떨어지는 숫자들을 배열에 담아 오름차순으로 정렬합니다.
이때, 나누어 떨어지는 숫자가 없다면 [-1]을 return 하면 됩니다.
2. 풀이 과정
- 일반적인 풀이
def solution(arr, divisor):
answer = sorted([num for num in arr if num % divisor == 0])
if answer == []:
return [-1]
return answer
리스트 컴프리헨션을 이용하여 arr에 있는 숫자 중 divisor로 나누어 떨어지는 숫자만 리스트로 만들었고 sorted() 함수를 통해 오름차순 정렬 해 주었습니다.
아래에는 조건문을 통해 answer이 빈 리스트인 경우 [-1]을 return 했습니다.
- 논리 연산자 or을 이용한 풀이
def solution(arr, divisor):
return sorted([num for num in arr if num % divisor == 0]) or [-1]
우선 위의 코드를 이해하기 위해서는 논리 연산자인 and와 or에 대해 알아야 합니다.
A and B
논리식 | 결괏값 |
True and True | True |
True and False | False |
False and True | False |
False and False | False |
and 연산은 두 값이 모두 True 일 때만 True를 반환하고 한 값이라도 False라면 False를 반환합니다.
A or B
논리식 | 결괏값 |
True or True | True |
True or False | True |
False or True | True |
False or False | False |
or 연산은 두 값 중 하나라도 True이면 True를 반환하고 두 값이 모두 False 일 때만 False를 반환합니다.
def solution(arr, divisor):
A = sorted([num for num in arr if num % divisor == 0])
B = [-1]
return A or B
B는 값이 있는 리스트 이므로 True고 A는 값이 있을 땐 True, 빈 리스트인 경우에는 False입니다.
결국 True or True 아니면 False or True인데 전자는 둘 다 True이므로 앞에 있는 True인 정렬된 리스트가 반환되고 후자는 True인 [-1]이 반환됩니다.
자료형 별 Bool값을 아신다면 더욱 이해가 편할 겁니다.
자료형 별 Bool값
값 | 설명 | Bool 값 |
"" | 빈 문자열 | False |
"apple" 혹은 " " | 값이 있는 문자열 (공백만 있어도 O) |
True |
[ ] | 빈 리스트 | False |
[1, 2, 3] | 값이 있는 리스트 | True |
0 | 숫자 0 | False |
-1 혹은 3.14 혹은 루트 2 |
0을 제외한 모든 숫자 (실수) |
True |
{} | 빈 딕셔너리 | False |
() | 빈 튜플 | False |
set() | 빈 집합 | False |
오늘은 나누어 떨어지는 숫자 배열 문제를 통해 논리연산자 and와 or 그리고 자료형 별 Bool값에 대해 공부해 보았습니다. 도움이 되셨다면 하트와 구독 부탁드립니다. 감사합니다.
'Algorithm > Python' 카테고리의 다른 글
[Python] 프로그래머스 코딩테스트 연습 > 문자열 밀기 (문자열 슬라이싱, deque) (0) | 2022.12.26 |
---|---|
[Python] 프로그래머스 코딩테스트 연습 > 햄버거 만들기 (0) | 2022.12.25 |