[프로그래머스][LV.1] 정수 제곱근 판별 | python3
2025. 1. 16. 13:57ㆍ프로그래머스/LV.1
문제 링크: 정수 제곱근 판별
문제 설명
문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
제한사항
- n은 1이상, 50000000000000 이하인 양의 정수입니다.
문제 풀이
처음엔
이렇게 타입을 비교해서 하려고 햇는데 안됐다.def solution(n): answer = -1 if type(n**(1/2)) == int: return (n+1)**2 return answer
그래서 피티씨한테 약간의 도움을 받아서 다시 작성했다.
재곱근이 int를 씌웠을때랑 같으면 제곱근은 정수이다.
내코드
def solution(n):
answer = -1
if (n**0.5) == int(n**0.5):
return (n**0.5+1)**2
return answer
더보기
다른사람풀이
def nextSqure(n):
sqrt = n ** (1/2)
if sqrt % 1 == 0:
return (sqrt + 1) ** 2
return -1
-----------------------------------
def nextSqure(n):
from math import sqrt
return -1 if sqrt(n) % 1 else (sqrt(n)+1)**2
제곱근을 구해서 1로 나눈 나머지가 0일때를 구하면 제곱근이 정수인 것을 구할 수 있다. 기억하면 좋을 아이디어인 것 같다.
def nextSqure(n):
return n == int(n**.5)**2 and int(n**.5+1)**2 or '-1'
♣ and와 or의 역할:
- and:
- and는 왼쪽 조건이 참(truthy)일 때만 오른쪽 값을 평가하고 반환합니다.
- 왼쪽 조건이 **거짓(falsy)**이면 오른쪽 값을 평가하지 않고 바로 왼쪽 값을 반환합니다.
- or:
- or는 왼쪽 조건이 참(truthy)**이면 오른쪽 값을 평가하지 않고 바로 왼쪽 값을 반환합니다.
- 왼쪽 조건이 거짓(falsy)이면 오른쪽 값을 평가하고 그 값을 반환합니다.
♣ 이 코드의 동작 원리:
- n == int(n**.5)**2:
- 주어진 수 n이 완전제곱수인지 확인합니다.
- n**0.5는 n의 제곱근을 계산하며, 이를 정수로 변환한 후 다시 제곱해 n과 비교합니다.
- 이 조건이 **참(True)**이면 and 오른쪽(즉, int(n**.5+1)**2)을 평가합니다.
- 조건이 **거짓(False)**이면 바로 or '-1'로 넘어갑니다.
- int(n**.5+1)**2:
- n이 완전제곱수라면, n의 제곱근보다 1 큰 수의 제곱을 반환합니다.
- or '-1':
- 위 조건들이 모두 실패한 경우, 즉 n이 완전제곱수가 아니면 '-1'을 반환합니다.
'프로그래머스 > LV.1' 카테고리의 다른 글
[프로그래머스][LV.1] 서울에서 김서방 찾기 | python3 (0) | 2025.01.16 |
---|---|
[프로그래머스][LV.1] 정수 내림차순으로 배치하기 | python3 (0) | 2025.01.16 |
[프로그래머스][LV.1] 자연수 뒤집어 배열로 만들기 | python3 (0) | 2025.01.16 |
[프로그래머스][LV.1] 두 정수 사이의 합 | python3 (0) | 2025.01.16 |
[프로그래머스][LV.1] 나누어 떨어지는 숫자 배열 | python3 (0) | 2025.01.16 |