티스토리 뷰
문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
제한 사항
n은 1이상, 50000000000000 이하인 양의 정수입니다.
입출력 예
n | return |
121 | 144 |
3 | -1 |
입출력 예 설명
입출력 예#1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.
입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.
solution
n의 값이 매우 큽니다.
단일 for 문을 사용해서 문제를 풀 수 있겠지만 메모리 효율이 매우 떨어질 가능성이 높습니다.(이로 인해 틀린 답이 될 수도 있을 겁니다.)
그렇다면 우리는 어차피 제곱근을 만들면 되기때문에 제곱근 계산을 위해서 파이썬의 내장함수를 사용하여 풀거나 직접 연산자로 구현해도 될 것 같네요.
math 모듈을 사용한 풀이와 직접 연산자로 구현한 풀이 두가지를 구현하겠습니다.
저는 math 등의 모듈을 사용한 풀이를 그렇게 좋아하지 않아서 1번 풀이가 끌리네요.
solution 1. 직접 연산자를 활용한 풀이
def solution(n):
if (n ** (1/2))%1 == 0:
return (n ** (1/2) + 1) ** 2
else:
return -1
n ** (1/2)는 n의 1/2승으로 제곱근을 나타냅니다.
이 값이 (x%1 == 0) -> 정수값일 때 + 1 한 값의 제곱을 반환하고 정수가 아닐경우 -1을 리턴하는 것으로 문제 풀이가 완료됩니다.
solution 2. math 모듈의 sqrt 함수를 사용한 풀이
import math
def solution(n):
x = math.sqrt(n)
if (n ** (1/2))%1 == 0: #혹은 x == int(x) 를 사용해서 정수를 확인할 수 있습니다.
return math.pow(x+1, 2)
return -1
math.sqrt(n)은 n의 제곱근을 구하는 함수입니다.
이 값을 판별할 때 x == int(x) 를 사용해서 정수를 확인하는 것도 가능합니다.
위와 마찬가지로 정수일경우 x+1의 제곱을, 정수가 아닐 경우 -1을 리턴하는 것으로 풀이가 끝납니다.
'개발 > 알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 - 구명보트 파이썬 (0) | 2023.01.18 |
---|---|
[알고리즘] 프로그래머스 - 영어 끝말잇기 파이썬 (0) | 2023.01.18 |
[알고리즘] 프로그래머스 - 카펫 파이썬 (0) | 2023.01.11 |
[알고리즘] 프로그래머스 - 짝지어 제거하기 파이썬 (0) | 2023.01.10 |
[알고리즘] 프로그래머스 - 다음 큰 숫자 파이썬 (0) | 2023.01.09 |
- Total
- Today
- Yesterday
- 디프만
- 인프런
- 글또
- 6팀
- 글로컬
- 연합 동아리
- 후기
- 1주차
- spring boot
- it 동아리
- 중간발표
- 16기
- 해커톤
- 알고리즘
- python
- 서버
- 파이썬
- 육지행
- AWS
- tdd
- test
- 백엔드
- 프로그래머스
- server
- 15기
- 10기
- 리빙랩
- 스터디
- 육.지.행
- 회고
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |