완전제곱수를 만들 때는 root만 계산하면 되는줄 알았는데, 반례가있기 때문에 다시 제곱을 취해줘야한다는것을 처음 알았다.
그리고 root를 취할 때 math.sqrt
대신 i ** 0.5
를 하면 간편하게 계산 할 수 있다. (이것도 처음 알았다.)
- first = int(i ** 0.5)
- 처음 수를 root를 취하자(i^0.5)
- second = first ** 2
- first에 다시 거듭제곱(i^2)
굳이 while문을 사용하지 않아도된다.
만약, append값이 없으면 ( num == [] )
과 같이 사용한다.
m = int(input())
n = int(input())
num = []
for i in range(m, n+1):
root = int(i ** 0.5)
if i == root ** 2:num.append(i)
if num == []:
print(-1)
else:
print(f'{sum(num)}\n{min(num)}')
int형을 str로 바꿔 계산하자.
조건에 n이 10000까지기 때문에 for문의 범위를 10001로 설정했다.
문제를 풀다가 잘 안풀리면 곧장 포기하고 다른 방법으로 풀려는 경향이 있는데, 끈질기게 끝까지 매달리는 능력을 길러야겠다.
def d(n):
result = 0
for i in str(n):
result = result + int(i)
return result + int(n)
a=[]
for j in range(1, 10001):
n = d(j)
a.append(n)
for k in range(1,10001):
if k not in a:
print(k)