[프로그래머스] 정수 제곱근 판별
2024. 5. 28. 20:38ㆍ개인활동/코테
반응형
# def solution(n):
# num_list = [i for i in range(1, n + 1) if n % i == 0]
# if len(num_list) % 2 != 0:
# answer = (num_list[len(num_list) // 2] + 1)**2
# else :
# answer = -1
# return answer
def solution(n):
n_root = n**(1/2)
if n_root % 1 == 0:
return (n_root + 1) ** 2
else:
return -1
## 어떤 수의 제곱인지 확인하기
"""
1. 약수 구하기 -> 약수의 갯수가 홀수이면? -> 어떤 수의 제곱 : 시간초과
2. 1/2를 제곱하기 -> 정수가 나오면 됨 -> n_root 계산을 하면 float형으로 나옴, why;;; -> round를 쓰기엔 else문으로 안넘어감
3. 소수점 아래가 0인지 아닌지 확인? 1로 나누기? -> 이게 되네?
"""
세번의 시도 끝에 적절한 코드를 찾아내었다!
루트를 씌운 값을 가져와 1로 나누었을 때 나머지가 없는지, 즉 소수점 밑의 값들이 있는지 없는지를 확인해주는 과정을 거쳤다.
처음에는 약수의 개수를 활용하여 문제를 풀어보고자 하였는데, 시간초과 문제가 좀 많이 발생했다.
그래서 다른 방법을 사용한 것이 **1/2
하는 것이였고, 이 때 주의할 점은 **(1/2)
를 해주어야 한다는 점이다.
그 이유는 **1/2
와 **(1/2)
는 출력값이 다르다...
print(121**(1/2))
print(121**1/2)
이렇게 출력값이 다르게 나오며, 이 때 float 형으로 반환하는 것을 확인할 수 있었다.
그렇다보니 isinstance()
함수를 사용하여 정수형인지 아닌지로 판단하는데는 어려움이 존재하였고, 최종적으로 시도한 방식이 1로 나누었을 때 나머지 값을 확인하는 것이였다.
다른 사람의 코드를 보던 중 신기한 방법을 보게 되었는데,
### 문제가 개편되어 2024년 5월 기준으로 풀 때와 출력값이 조금 다르다
def nextSqure(n):
return n == int(n**.5)**2 and int(n**.5+1)**2 or 'no'
앞의 조건이 성립되면 무조건적으로 return할 수 있는 코드였다.
우와~
반응형
'개인활동 > 코테' 카테고리의 다른 글
백준 28278번 : 스택 2 (1) | 2024.05.30 |
---|---|
백준 12789번 : 도키도키 간식드리미 (0) | 2024.05.29 |
[프로그래머스] 정수 내림차순으로 배치하기 (0) | 2024.05.27 |
[프로그래머스] 자연수 뒤집어 배열로 만들기 (0) | 2024.05.26 |
[프로그래머스] 자릿수 더하기 (0) | 2024.05.25 |