반응형
밑의 링크는 CodeUp에서의 문제 링크입니다.
문제는 링크를 통해서 직접 봐주시길 바랍니다.
주의해야 할 점
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)
제출 결과
느낀 점
이 문제는 반복문 사용을 의도한 문제이긴 하지만,
제 생각에는 이게 더 효율적으로 푸는 방법인 것 같습니다.
※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.
※ 더 효율적이고 빠른 정답을 환영합니다.
※ 공감 버튼❤과 구독 버튼도 잊지 말고 꾹 눌러주시면 감사하겠습니다~👍👍
반응형
댓글