문제
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
def solution(n):
answer = 0
x = n**(.5)
if n % x == 0:
answer = (x+1)**2
else :
answer = -1
return answer
문제 자체는 쉽게 풀었다. 제곱근인 숫자는 제곱근이 정수로 나오기 때문에 나누어 떨어지고 제곱근이 없는 숫자는 x가 소수점 숫자가 나오기 때문에 나누어 떨어지지 않는다. 이걸 이용해서 쉽게 풀었다.
다른 사람 풀이에서 and 연산자를 이용한 풀이를 바로 이해가 되지 않아
공부하는 겸 찾아 보았다.
다른 사람의 문제 풀이
def nextSqure(n):
return n == int(n**.5)**2 and int(n**.5+1)**2 or -1
n 과 and 앞 int(n**.5)**2 와 비교연산자(==)를 이용하여,
제곱근이 있는 수면 True , 제곱근이 없는 수면 False 가 된다. 이유는 int(n**.5)을 했을 때 n에 루트를 씌웠을 때 제곱근이 없다면 소수점으로 나온다. ex) 2**0.5(= √2) 는 1.41421...이다.
그 값을 int로 묶으면 소수점을 버림 한다. 따라서 n == int(n**.5)**2 으로 제곱근 유무를 판단할 수 있다.
A and B 의 경우 A가 거짓이라면 B는 and 연산자 입장에서 중요 하지 않음 따라서 or 연산자 -1 이 출력된다.
or 연산자가 없는 경우 A 의 False가 출력된다.
A and B에서 A가 참이라면 B가 참,거짓 여부 상관없이 B를 리턴해준다.
따라서 위 풀이는 and 연산자의 특징을 이용하여 내가 if 문에 사용한 검증 단계? 를 수행하였고 or 연산자로 -1 을 출력한 것이다.
'알고리즘' 카테고리의 다른 글
요소 개수 찾기 count() , Counter (1) | 2022.10.07 |
---|---|
정렬(오름,내림 차순) 및 리스트 요소 순서 뒤집기(reverse,reversed) (0) | 2022.10.05 |
프로그래머스 - Lv1. 두 정수 사이의 합 (0) | 2022.10.03 |
진수 변환 (0) | 2022.03.15 |
시간 복잡도 (Big-O) (0) | 2021.11.01 |