기록하는삶

[코딩 테스트 연습(파이썬/Python)] 프로그래머스 _ 정수 제곱근 판별 본문

프로그래머스/프로그래머스_lv1(Python)

[코딩 테스트 연습(파이썬/Python)] 프로그래머스 _ 정수 제곱근 판별

mingchin 2021. 9. 10. 02:55
728x90
반응형

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

 

코딩테스트 연습 - 정수 제곱근 판별

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

programmers.co.kr

[문제 설명]

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

[제한 조건]

  • n은 1이상, 50000000000000 이하인 양의 정수입니다.
def solution(n):
    answer = [(pow(n, 0.5) +1)**2 if int(pow(n, 0.5))==pow(n, 0.5) else -1]
    return int(answer[0])

처음보는 return의 형태가 있어 가져와봤다.

def solution(n):
    # return A and B or C
    return n == int(n**.5)**2 and int(n**.5+1)**2 or -1

파이썬에서는 0, [], '' 등이 False로 취급되고, 값이 있는 것은 True로 취급된다.

또한 return과 and/or 연산은 아래의 관계를 가진다.

 

1) return A and B

A, B 모두 참인 경우 -> return B

둘 중 하나만 참인 경우 -> return A or B (which is False)

둘 다 거짓인 경우 -> return A

 

2) return A or B

A, B 모두 참인 경우 -> return A

둘 중 하나만 참인 경우 -> return A or B (which is True)

둘 다 거짓인 경우 -> return B

 

이를 통해 위의 2번째 코드를 이해해보면 다음과 같다.

먼저 A, B 중 B는 무조건 참이므로,

A가 참이면 -> return B (= True : 값이 존재하므로)

A가 거짓이면 -> return A(= False : False이어서 A가 선택되었으므로)

 

즉,

A가 참이면 -> return B(True) or C(True) -> return B

A가 거짓이면 -> return A(False) or C(True) -> return C

 

따라서 A의 조건을 만족하면(n이 제곱근이면) B인 그 다음 제곱수가,

A의 조건을 만족하지 않으면(n이 제곱근이 아니면) C인 -1이 출력되는 매직..

 

728x90
반응형