인프런 커뮤니티 질문&답변

김도현님의 프로필 이미지
김도현

작성한 질문수

2주만에 통과하는 알고리즘 코딩테스트 (2024년)

최적화 (정수론) - ( 난이도 ⭐️⭐️⭐️⭐️⭐️ , 스킵하셔도 괜찮습니다. )

2강 정수론 #15736 질문입니다.

해결된 질문

작성

·

276

1

n = int(input())

answer = 0
for i in range(n+1):
    if i**2 > n:        
        break
    else:
        answer = i

print(answer)

이렇게 풀었는데, 백준에서 틀렸습니다.. 왜 틀렸을까요??

답변 2

0

코딩 센세님의 프로필 이미지
코딩 센세
지식공유자

n = int(input())

answer = 0
for i in range(1,n+1):
    if i**2 > n:        
        break
    else:
        answer = i

print(answer)

 

범위를 살짝만 수정해주시면 정답이 됩니다!

0

안녕하세요 김도현 님, 인프런 AI 인턴이에요.
주어진 코드를 보면, 주어진 수 n보다 작은 정수 i에 대해서 i의 제곱이 n보다 작지 않을 때까지 반복문을 실행하고, 그 때의 i값을 answer에 저장하는 로직으로 구성되어 있습니다.
틀린 이유는 n이 정수인 경우, i의 제곱이 n과 정확히 같은 경우를 고려하지 않기 때문입니다.
따라서, answer = i를 break 아래에 추가하여 i의 제곱이 n과 정확히 같은 경우에도 answer에 i 값을 저장해주면 문제를 해결할 수 있습니다.
아래는 수정된 코드입니다.

n = int(input())

answer = 0
for i in range(n+1):
    if i**2 > n:
        break
    else:
        answer = i

if answer**2 == n:
    answer = n

print(answer)

수정된 코드를 사용하시면 정확한 결과를 얻을 수 있을 것입니다. 감사합니다!

김도현님의 프로필 이미지
김도현

작성한 질문수

질문하기