본문 바로가기
알고리즘/CodeUp PS

[CodeUp][Python] 1282번 : 제곱수 만들기

by 빛밤하늘 2021. 9. 19.
반응형

밑의 링크는 CodeUp에서의 문제 링크입니다.

문제는 링크를 통해서 직접 봐주시길 바랍니다.

 

제곱수 만들기

$n$이 입력되면 $k$를 빼서 제곱수를 만들 수 있는 $k$를 구하고, 그 제곱수에 루트를 씌운 수(제곱근) $t$를 구하여라. 이 때 k는 여러가지가 될 수 있는데 가장 작은 k를 출력한다.

codeup.kr

 

 

 

주의해야 할 점

1. readline과 int나 float를 사용하는 입력 방식

readline을 사용해서 입력할 때는 맨 끝에 \n이 붙어서 입력됩니다.

하지만, 입력한 값을 int나 float으로 처리해 정수, 실수형으로 만들어 줄 때는 

굳이 \n을 떼기 위해 rstrip을 사용할 필요가 없습니다.

숫자 형태를 만들어줄 때 자동으로 사라집니다.

num = int(sys.stdin.readline())

 

 

예제 설명

1. 첫 번째 예제

- 입력

34

 

- 출력

9 5

 

- 설명

입력한 n은 34입니다.

n의 제곱근은 5.83095...입니다.

n의 제곱근 이하의 수 중 가장 큰 자연수 t는 5입니다.

t의 제곱은 25이므로, n에서 k를 빼서 제곱수를 만들 수 있는 가장 작은 k는 34 - 25 = 9입니다.

따라서 k, t 순서대로 공백으로 구분해 9 5를 출력합니다.

 

 

생각한 풀이 과정

0 < k < n <= 2^31인 n을 입력합니다.

n의 제곱근을 구해 변수 root_n에 저장합니다.

root_n의 값을 int형으로 변환해 root_n의 값보다 작은 수 중 가장 큰 자연수를 구해 변수 t에 저장합니다.

t의 제곱수를 구해 변수 n_square에 저장합니다.

n의 값에서 t의 제곱수인 n_square의 값을 빼 k를 구하고 변수 k에 저장합니다.

 

k, t의 값을 공백으로 구분해 출력합니다.

 

 

제출한 파이썬 코드

# readline을 사용하기 위해 import합니다.
from sys import stdin


# n을 입력합니다. 
# 0 < n <= 2^31
# int형으로 변환합니다.
n = int(stdin.readline())
# n의 제곱근을 구하고 변수에 저장합니다.
root_n = n ** 0.5
# n의 제곱근인 root_n의 값을 int형으로 변환해서 root_n보다 작은 수 중 가장 큰 자연수를 구해 변수에 저장합니다.
t = int(root_n)
# t의 제곱수를 구해 변수에 저장합니다.
n_square = t ** 2
# n에서 t의 제곱수인 n_square를 빼서 k를 구해 변수에 저장합니다.
# 0 < k < n <= 2^31
k = n - n_square

# k, t를 공백으로 구분해 출력합니다.
print(k, t)

 

 

제출 결과

CodeUp 1282번 : 제곱수 만들기에서 코드 제출 결과
CodeUp 1282번 : 제곱수 만들기에서 코드 제출 결과

 

 

느낀 점

이 문제는 반복문 사용을 의도한 문제이긴 하지만, 

제 생각에는 이게 더 효율적으로 푸는 방법인 것 같습니다.

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

※ 공감 버튼과 구독 버튼도 잊지 말고 꾹 눌러주시면 감사하겠습니다~👍👍

반응형

댓글