On the journey of

[프로그래머스 Python 2,3] 자연수 뒤집어 배열로 만들기, 정수 제곱근 판별 본문

코딩테스트/Python

[프로그래머스 Python 2,3] 자연수 뒤집어 배열로 만들기, 정수 제곱근 판별

dlrpskdi 2023. 5. 2. 14:40

1. 자연수 뒤집어 배열로 만들기

문제 - 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해 주세요. 예를 들어 n이 12345라면 [5,4,3,2,1]을 리턴합니다. 단, n은 10,000,000,000 이하인 자연수입니다. 입출력 예시는 아래와 같습니다.

ALG - 입력받은 숫자를 1) 각 자리 숫자별로 쪼갠 다음 2) 리스트로 저장해야 합니다. 3) 그 후, 순서를 뒤집어야 합니다.

POINT - 2) 과정을 위해 map 함수를 활용합니다. map 함수란 리스트의 요소를 지정된 함수로 처리해주는 함수로, 원본 리스트를 변경하지 않고 새 리스트를 생성합니다. 

 

SOL  -

def solution(n):
 n = list(str(n)) #입력받은 숫자를 쪼개기 위해 str 형태로 변환한 후, list로 최종 변환
 n = list(map(int,n)) #map 함수를 활용해 list로 저장
 n.reverse() #순서 뒤집기
 return n

 

그리고 무난히 통과!

2. 정수 제곱근 판별

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

예시를 보면, 121은 11의 제곱이므로 x=11이 되어 (x+1)의 제곱, 즉 12의 제곱인 144가 return 되었습니다. 반면 3은 제곱수가 아니기에 -1이 return 되었음을 확인할 수 있습니다. 

ALG - 직접 if문을 활용한 함수를 정의하거나, math 모듈을 알고 있다면 이를 활용할 수 있다.

SOL-  1) if문 활용한 함수 정의

 

def solution(n):
	x = n ** 0.5 #0.5제곱 (=제곱근; 1/2로 해도 무방)
    if x%1 == 0: return (x+1) **2  #x가 정수라면 1로 나눴을 때의 나머지가 0일 것임에 착안
    #x가 정수라면 n이 제곱수라는 뜻이 되므로, (x+1)의 제곱이 return되게끔 한다.
    return -1 #아니라면 -1을 return

SOL-  2) math 모듈과 if문을 활용

import math #math 모듈 불러오기. math 모듈에는 sqrt(square root: 제곱근) 함수가 있다
def solution(n):
	x = math.sqrt(n)
    return (x+1)**2 if x == int(x) else -1 #x와 정수(int(x))가 일치하는지를 if로 따졌다.

둘 다 무난하게 통과 :D