- 5
- 초보
- 조회 수 407
n = int(input()) #입력받을 숫자의 개수
li = [int(input()) for _ in range(n)] #숫자입력받기
count = 0 #제곱수의 개수
for i in range(0, n): #n로 반복중
for x in range(1, n+1): #반복
if li[i] == int(x ** 0.5) ** 2: #조건문
count += 1 #카운트
print(count) #출력
입력받은 리스트안에 몇개 완전제곱수(1, 4, 9, 16...)가 있는지 출력하는 코드를 만들고 싶습니다.
여기서 5, 1, 35, 25, 55, 44를 입력하면 2가 출력돼야하는데 3이 출력됩니다.
도와주시면 감사합니다.
추천인 2
댓글 5
일단 int(x ** 0.5) ** 2 이 부분에 문제가 있구요.
추가적으로 최적화할 부분이 있다면 카운트 이후 루프를 탈출해서 불필요한 연산을 줄일 수 있겠습니다.
n = int(input()) #입력받을 숫자의 개수
count = 0 #제곱수의 개수
for i in range(0, n): #n로 반복중
number = int(input())
for x in range(1, n+1): #반복
if number / x == x: #조건문
count += 1 #카운트
print(count) #출력
이 코드는 5, 1, 35, 25, 55, 44를입력하면 2가 출력되지만
3, 8, 1, 49를 입력하면 3대신 1이출력됩니다.
n = int(input()) #입력받을 숫자의 개수
li = [int(input()) for _ in range(n)] #숫자입력받기
count = 0 #제곱수의 개수
for i in range(0, n): #n로 반복중
for x in range(1, li[i]+1): #반복
if li[i] == x * x: #조건문
count += 1 #카운트
break #스킵
print(count) #출력
이렇게하면되는거였네요ㅎㅎ
감사합니다!