[BaekJoon] 백준 17626번 Four Squares
문제: https://www.acmicpc.net/problem/17626
내코드
문제 내용은 간결했지만 어떤식으로 풀어야 할지 생각이 필요했던 문제다. 더군다가 시간도 0.5초로 짧은 편이라서 무작정 구현하기에는 무리였다.
문제에서 가장 중요한 조건은 결국 어떤 수든 답은 1, 2, 3, 4 중에 하나라는 의미이다. 즉, 주어진 수가 정수의 제곱수면 1, 어떤 정수 i에 대해 n - i^2의 제곱근이 정수면 2, 어떤 정수 i, j에 대해 n - i^2 - j^2의 제곱근이 정수면 3, 그외의 경우는 모두 4라는 의미이다.
# BaekJoon17626.py
def solution(n):
# n이 제곱근이 정수라면 답은 1
if int(n**0.5) == n**0.5:
return 1
# 1 ~ (n의 제곱근의 올림값)을 i라고 하고 (n - i^2)의 제곱근이 정수라면 답은 2
for i in range(1, int(n**0.5) + 1):
if int((n - i**2)**0.5) == (n - i**2)**0.5:
return 2
# (n - i^2 - j^2)의 제곱근이 정수라면 답은 3
for i in range(1, int(n**0.5) + 1):
for j in range(1, int((n - i**2)**0.5) + 1):
if int((n - i**2 - j**2)**0.5) == (n - i**2 - j**2)**0.5:
return 3
# 1, 2, 3도 아닌경우 답은 4
return 4
n = int(input())
print(solution(n))
참고
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[BaekJoon] 백준 9019번 DSLR (0) | 2021.07.22 |
---|---|
[BaekJoon] 백준 2606번 바이러스 (0) | 2021.07.17 |
[BaekJoon] 백준 1931번 회의실 배정 (0) | 2021.07.16 |
[BaekJoon] 백준 1927번 최소 힙 (0) | 2021.07.16 |
[BaekJoon] 백준 11659번 구간 합 구하기 4 (0) | 2021.07.16 |