알쿼리즘: 파이썬 코드훈련 19, 20, 21번
2024. 7. 1. 15:03ㆍ전처리/PYTHON
01 정수의 제곱근 판별
나의 코드: 비모듈, 바로 떠올릴 수 있던 로직이나 숫자가 커질수록 비효율적이다.
def solution(n):
for i in range(1, n+1):
if i**2 == n:
return (i+1)**2
return -1
멘토님 코드: 정수를 판별하는 if문으로 2가지 경우의 수를 사용할 수 있다.
import math
def solution(n):
# 어떤 숫자가 주어졌을 때 제곱근이 없다는게 대부분의 경우
# 따라서 기본 정답을 -1 로 정하고 시작하는것.
answer = -1
n_sqrt = math.sqrt(n)
# 만약 제곱근 쓴 숫자가 정수라면 정답
if n_sqrt.is_integer():
answer = n_sqrt
return (answer + 1)**2
# 또는 다음과 같이 판별: 1/2제곱값이 정수일 때
# if int(n**0.5) == n**0.5:
return answer
팀원 코드(1): 제곱근의 정수를 구하고 이것의 제곱이 실제 n값과 같은지 확인한다.
import math
def solution(n):
answer = int(math.sqrt(n))
# 제곱근을 제곱하면 실제로 n이 나오는가에서 정답이 갈린다.
if n == answer ** 2:
return (answer + 1) ** 2
else:
return -1
팀원 코드(2): 제곱근을 1로 나눈 나머지가 0이면 정수, 아니면 -1을 출력한다.
def solution(n):
root = n**0.5
# 나머지로 정수 판별
if root%1 == 0:
return (root+1)**2
else:
return -1
결론: 제곱근이 정수라면? or 제곱근과 number의 직접 비교하는 두 가지의 경우의 수가 있음.
02 인사이트
1. math.sqrt(number)에서 sqrt는 square root의 약자로 제곱근을 계산하는 함수이다.
2. is_integer() 정수인지 아닌지 참과 거짓을 판별해준다.
3. number**0.5로 제곱근을 판별하는데 사용할 수 있다.
03 정수 내림차순으로 배치하기
def solution(n):
answer = list(reversed(sorted(str(n))))
return int(''.join(answer))
- sorted(str(n))은 문자열 데이터를 정렬된 리스트로 바꿔서 출력한다.
- sorted는 기존의 배열을 건드리지 않는다. 정렬 후 return을 한다. 때문에 정렬 결과가 print 된다.
- sort()는 기존의 배열을 수정한다. print하면 None이 뜬다. reverse=True 파라미터가 있다.
04 하샤드 수
나의 코드: list(map(int, str(x)))를 이용해서 숫자의 자릿수별 리스트를 만들었다.
def solution(x):
number = list(map(int, str(x)))
if x % sum(number) == 0:
return True
else:
return False
멘토님 코드
def solution(x):
# 기능1) 자릿수의 합을 기능을 구현(ex 18 -> 1 + 8 -> 9 )
# 변수 sum
# 몫/나머지 기능 내장함수, 연산자(//, %)
# 자릿수의 합을 구하기 위해서 무한대로 나눠야할 수도있으나
# 10000이므로 최대 4번까지만 나누면 될듯
# 이방식은 while
n = x # 처음 들어온 수를 따로 저장
sum = 0
while x >10:
remain = x % 10 # 나머지: 한자리수 특징
x = x // 10
sum = sum + remain
# print("나머지",remain,"몫", x, "합", sum) # 루프마다 진행되는 진척을 확인
sum = sum + x #sum : 문제에서 요구하는 자릿수의 합
# 기능2) x를 a로 나눠서 나누어 떨어지는지 체크
if n % sum == 0: # 나누어 떨어진다면
return True
else:
return False
팀원 코드
def solution(x):
return x%sum(map(int, str(x))) == 0
- 비교연산자(==) 혹은 논리연산자의 결과가 항상 불리언 값임을 잊지 말자.
- 예를 들어, 3==2를 실행하면 False를 출력한다.
05 문제 링크
'전처리 > PYTHON' 카테고리의 다른 글
알쿼리즘: 파이썬 코드훈련 25, 26, 27번 (0) | 2024.07.05 |
---|---|
알쿼리즘: 파이썬 코드훈련 22, 23, 24번 (0) | 2024.07.02 |
문자열을 거꾸로 만드는 슬라이드 표기법 (0) | 2024.06.24 |
제너레이터 표현식과 next함수의 활용 (0) | 2024.06.21 |
정규 표현식: 보다 간단하게 개인 정보를 보호하자 (0) | 2024.06.20 |