Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

김찬양의 개발일지

49일차. 정수 제곱근 판별 본문

코딩테스트/Programmers Level 1

49일차. 정수 제곱근 판별

자유로운영혼이다냥 2024. 1. 16. 21:17

링크

https://school.programmers.co.kr/learn/courses/30/lessons/12934

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제

문제 설명

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

제한 사항
  • n은 1이상, 50000000000000 이하인 양의 정수입니다.

 

정답

def solution(n):
    return (n**.5).is_integer() and (n**.5+1)**2 or -1

 

풀이과정

 

n의 **.5 즉, 루트n이 is_integer(), 정수라면

(n**.5).is_integer()

n의 **.5에 1을 더하고 제곱한다.

(n**.5+1)**2

만일 아니라면 -1을 리턴한다.

and 연산자는 앞쪽이 false라면 뒷쪽이 true던 false던 반드시 false가 나오기떄문에, false를 반환한다. 따라서 위의 둘을 and로 엮고

(n**.5).is_integer() and (n**.5+1)**2

이 결과가 false라면, -1을 출력해야하므로, or -1을 해준다.

or -1

만일 .is_integer()가 true라면, 그 뒤의 숫자는 0이 올 일이 없으므로 반드시 true이고 and의 연산값은 true가 된다.

따라서 or은 앞의 값을 뱉게된다.