정수 제곱근 판별 - 문제
[문제 설명]
[입출력 예]
코드카타 1차 시기
[내 코드]
def solution(n):
answer = 0
for i in range(1,n):
if i*i==n:
answer=(i+1)**2
else:
answer = -1
return answer
제곱근을 구해야 하므로 'i x i=n'인 값을 찾는다고 생각해서 이렇게 써봄
[실행 결과]
역시나 턱없는 실패.
값이 나오지 않고, -1로만...결과가 나오는 듯 하다.
코드카타 2차 시기
[내 코드]
def solution(n):
answer = -1
for i in range(1,n):
if n/i==i:
answer=(i+1)**2
return answer
결국 코드카타 검색 ending
검색을 해보고 수정을 2가지 해보기로 함
- -1값을 산출해야하므로 아예 answer 값을 -1로 설정하라고 함.
나는 if 구문을 사용했는데 실은 이게 맞는지 모르겠지 뭐야......//..// - 위에서 곱셈으로 기재했던 부분을 나눗셈으로 변경해서 기재함.
샘플 데이터에서는 잘 나오더라.
[실행 결과]
예....그렇지만 시간 초과로 안 돌아가요.
결국 실패 (지겨워..)
코드카타 3차 시기
[내 코드카타]
def solution(n):
answer = -1
for i in range(1,n):
if n/i==i:
answer=(i+1)**2
break
return answer
어디서 또 찾아본 break 함수
배우긴 배웠는데 기억이 나지 않는다.
막간을 이용한 함수 재정리
break 문법
for, while 등 반복문 내에서 사용할 수 있는 문법
break를 사용하는 경우 즉시 해당 반복문을 탈출함
[실행 결과]
네 다왔는데 뭐가 문제일까요...
또 다시 검색..ㅎ
드디어 정답을 찾았다. 잡았다...요놈..!
드디어 정답 대공개
[정답 1]
def solution(n):
answer = -1
for i in range(1,n+1):
if n/i==i:
answer=(i+1)**2
break
return answer
예 range 범위가 n+1이어야 합니다.
[정답 2]
def solution(n):
answer = -1
for i in range(1,n+1):
if n//i==i and n%i==0:
answer=(i+1)**2
break
return answer
어디서 찾아보니 이런 방법도 쓰더라
'//' 는 나눗셈 후 정수의 몫만 표기하는 건데 아마 나눗셈 자체가 오래 걸리니 시간을 줄이려고 작성하신 게 아닐까 싶음
[정답 3]
def solution(n):
answer = 0
for i in range(1,n+1):
if n/i==i:
answer=(i+1)**2
break
else :
answer = -1
return answer
맨 처음 if 함수를 사용했었는데 이걸 끝까지 사용해서 구할 수 있는 방법이 있을까 해서 작성해봄.
결과는 대성공.
여기서는 break, 나눗셈을 활용했으면 금방 끝났을지도 모르겠다.
위에서 모두 -1 값이 산출되길래...안되는 건가 했는데 break를 걸어주니 문제 없다.
[정답 4]
def solution(n):
x = int(n ** (1/2))
if n == x **2:
return (x+1) ** 2
else:
return -1
다른 사람들의 풀이도 한 번 확인해보자.
내가 처음에 x를 곱해서 n인지 확인하려는 방법을 사용한 정답인데
이때 x에 대한 조건이 먼저 들어가 있는 것을 확인할 수 있다.
- x= int(n**(1/2)) - 먼저, n의 제곱근을 계산하고 이를 정수 값으로 x에 저장
그리고 나서 x를 제곱한 값이 n과 같은지 확인한 후 그 여부에 따라 값이 나오게끔 함
요건 x의 값을 설정해주고 진행하는 방법을 알았더라면 조금 더 원활하게 되었을 거 같음.
오늘도 한 문제 해결...(이라고 할 수 있는지 모르겠지만)
여튼 파이썬 너 여전히 너무 어렵다 나한테....ㅎ
'파이썬 > 코드카타' 카테고리의 다른 글
[프로그래머스] 파이썬(Python) 자릿수 더하기 (0) | 2024.08.05 |
---|