-
[프로그래머스 1단계] 알고리즘 10. 정수 제곱근 판별하기24년 11월 이전/레거시-알고리즘(3) 2018. 3. 19. 11:44반응형
문제 출처는 프로그래머스 알고리즘 연습 에서 볼 수 있습니다!(https://programmers.co.kr/learn/challenges)
알고리즘 10. 정수 제곱근 판별하기:
nextSqaure함수는 정수 n을 매개변수로 입력받습니다.n이 임의의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 임의의 정수 x의 제곱이 아니라면 'no'을 리턴하는 함수를 완성하세요.예를들어 n이 121이라면 이는 정수 11의 제곱이므로 (11+1)의 제곱인 144를 리턴하고, 3이라면 'no'을 리턴하면 됩니다.
def nextSqure(n):# 함수를 완성하세요return ''# 아래는 테스트로 출력해 보기 위한 코드입니다.print("결과 : {}".format(nextSqure(121)));풀이:
이 문제의 핵심은 n의 제곱근이 정수인지 판별하는 것이다. n의 제곱근이 num이라 할 때 num이 정수인지 판단은 다음 코드와 같다.
if num % 1 == 0혹은 int()를 이용하여 이렇게 해도 괜찮다.
if int(num) == num자 이제 본격적으로 문제를 풀어보자. 이 문제의 풀이는 필자가 생각할 때 크게 2가지가 있다. 먼저 내장 라이브러리 math를 이용하는 것이고 두 번째는 그냥 파이썬 연산자로 처리하는 것이다. 첫 번째로 math 라이브러리 이용한 코드를 살펴보자.
import mathdef nextSqure(n):# 함수를 완성하세요num = math.sqrt(n)return math.pow((num + 1), 2) if num % 1 == 0 else 'no'함수만 간단하게 설명하자면, math.sqrt(n)는 파라미터로 받은 n의 제곱근의 값을 반환한다. 반대로 math.pow(n, k)는 n의 k제곱을 값으로 반환한다. 이 코드가 무엇을 나타내는지 독자들은 가뿐하게 알 수 있을 것이라 생각한다. 참고로 마지막 리턴문은 if 컴프리헨션으로 제곱근이 정수라면 num+1의 제곱을 반환하고 아니라면 'no'를 반환하는 식이다. 이번엔 math 라이브러리 없이 파이썬 연산자로만 풀어보자.
def nextSqure(n):# 함수를 완성하세요num = n**.5return (num + 1) ** 2 if num % 1 == 0 else 'no'살펴볼 연산자는 **.과 **이다. 먼저 **. 은 이번 문제를 풀면서 알게 된건데
num = n**.5이 코드는 위 코드의 math.sqrt 부분과 똑같이 동작한다. (**. 뒤의 숫자 5가 아닌 다른 수를 넣을 수 있지만 정확히 무슨 뜻인지 알 수 없어 이 부분에 대한 설명은 추후 알게 되면 업데이트 하겠다.) 그리고 ** 연산자는 다음과 같이 쓸 수 있다.
n ** k이 코드는 math.pow(n, k)와 일치한다. 분명 내장 라이브러리를 잘 아는 것도 중요하지만 조금만 파이썬에 대해 깊이 알면 내장 라이브러리조차 없어도 쉽게 문제를 풀 수 있다는 것을 깨닫게 된 문제이다.
728x90'레거시 > 레거시-알고리즘(3)' 카테고리의 다른 글
[프로그래머스 1단계] 알고리즘 12. 문자열 내림차순으로 배치하기 (0) 2018.03.22 [프로그래머스 1단계] 알고리즘 11. 나누어 떨어지는 숫자 배열 (0) 2018.03.21 [프로그래머스 1단계] 알고리즘 9. 자릿수 더하기 (0) 2018.03.15 [프로그래머스 1단계] 알고리즘 8. 문자열 다루기 기본 (0) 2018.03.12 [프로그래머스 1단계] 알고리즘 7. 문자열 내 마음대로 정렬하기 (0) 2018.03.05