On the journey of
[프로그래머스 Python 2,3] 자연수 뒤집어 배열로 만들기, 정수 제곱근 판별 본문
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
'코딩테스트 > Python' 카테고리의 다른 글
[프로그래머스] 베스트앨범, 구명보트(해시, 탐욕 알고리즘) (0) | 2023.08.27 |
---|---|
[프로그래머스] 파이썬 최댓값과 최솟값, JadenCase 문자열 만들기 (1) | 2023.08.12 |
[Python] 프로그래머스 2문제 풀어보기(문자열 나누기, 옹알이2) (0) | 2023.04.27 |
[프로그래머스 Python 2,3] 약수의 합, x만큼 간격이 있는 n개 숫자 (0) | 2023.04.26 |
[프로그래머스 Python 2,3] 짝수와 홀수, 평균 구하기 (0) | 2023.04.25 |