[정수 제곱근 판별]
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
# 내가 작성한 코드
# 문제점: x의 제곱이 n인지 확인 후 아니면 바로 -1을 출력
def solution(n):
answer = 0
for x in range(1, n + 1):
if x ** 2 == n:
answer = (x + 1) ** 2
else:
answer = -1
return answer
# for문 사용
def solution(n):
for x in range(1, n + 1):
if x ** 2 == n: # x의 제곱이 n인지 확인
return (x + 1) ** 2 # x+1의 제곱 반환
elif x ** 2 > n: # x의 제곱이 n을 초과하면 더 이상 확인 필요 없음
break
return -1 # 제곱근이 없는 경우
# math 모듈 사용
import math # math 모듈 가져오기: 수학 계산을 위한 다양한 함수와 상수 제공
def solution(n):
sqrt_n = math.sqrt(n) # n의 제곱근을 구함
if sqrt_n.is_integer(): # 제곱근이 정수인지 확인
x = int(sqrt_n) # 정수로 변환
return (x + 1) ** 2 # x+1의 제곱 반환
else:
return -1 # 제곱근이 정수가 아니면 -1 반환
[정수 내림차순으로 배치하기]
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
# for문 사용
def solution(n):
digits = [] # 자릿수를 저장할 리스트
for digit in str(n): # 정수 n을 문자열로 변환하여 각 자릿수를 순회
digits.append(int(digit)) # 각 자릿수를 정수로 변환하여 리스트에 추가
digits.sort(reverse=True) # 리스트를 내림차순으로 정렬
result = 0 # 결과값 초기화
for digit in digits: # 정렬된 자릿수를 순회하며 정수로 결합
result = result * 10 + digit # 자릿수를 왼쪽으로 이동하며 추가
return result
# 간단한 코드
def solution(n):
# 1. 정수를 문자열로 변환
# 2. 각 자릿수를 리스트로 분리 후 정렬
# 3. 정렬된 결과를 다시 하나의 문자열로 결합
# 4. 문자열을 정수로 변환 후 반환
return int("".join(sorted(str(n), reverse=True)))
sorted
- 정렬된 결과를 반환하는 내장 함수
- 원본 데이터를 변경하지 않고, 정렬된 새로운 객체 반환
sorted(iterable, key=None, reverse=False)
numbers = [3, 1, 4, 1, 5]
# 오름차순 정렬
sorted_numbers = sorted(numbers)
print(sorted_numbers) # 출력: [1, 1, 3, 4, 5]
# 원본 데이터는 변경되지 않음
print(numbers) # 출력: [3, 1, 4, 1, 5]
# 내림차순 정렬
sorted_numbers_desc = sorted(numbers, reverse=True)
print(sorted_numbers_desc) # 출력: [5, 4, 3, 1, 1]
list.sort()
- 리스트의 메서드로, 리스트 객체 자체를 직접 정렬
- 반환값은 None이며, 원본 리스트 변경
list.sort(key=None, reverse=False)
numbers = [3, 1, 4, 1, 5]
# 오름차순 정렬
numbers.sort()
print(numbers) # 출력: [1, 1, 3, 4, 5]
# 내림차순 정렬
numbers.sort(reverse=True)
print(numbers) # 출력: [5, 4, 3, 1, 1]
sorted와 sort의 주요 차이점
특징 | sorted | list.sort |
데이터 타입 | 모든 반복 가능한 객체(iterable) | 리스트 전용 |
원본 데이터 | 변경되지 않음 | 원본 데이터가 변경됨 |
반환값 | 정렬된 새로운 객체 반환 | 반환값 없음(None) |
유연성 | 문자열, 튜플 등 다양한 타입 사용 가능 | 리스트에서만 사용 가능 |
언제 sorted와 sort를 사용할까?
- sorted:
- 원본 데이터를 유지해야 하는 경우
- 리스트 외에 문자열, 튜플 등 다른 반복 가능한 객체를 정렬해야 하는 경우
- list.sort:
- 원본 리스트를 직접 정렬해야 하며, 새로운 리스트가 필요하지 않은 경우
[하샤드 수]
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
# for문 사용
def solution(x):
h = []
for i in str(x):
h.append(int(i))
if x % sum(h) == 0:
answer = True
else:
answer = False
return answer
# 다른 방식
def solution(x):
# 1. 자릿수를 리스트로 변환 후 합 계산
digit_sum = sum(int(i) for i in str(x))
# 2. 하샤드 수 판별
if x % digit_sum == 0:
return True
else:
return False
'Python' 카테고리의 다른 글
Python 코드카타 오답: zip | boolean (1) | 2024.12.23 |
---|---|
Python 코드카타 오답: 두 정수 사이의 합 | index | min&max | sort() | while (1) | 2024.12.19 |
Python 코드카타 오답: 슬라이싱(리스트 뒤집기) | 형 변환 | 자릿수 더하기 | 약수의 합 | 숫자 간 간격 (0) | 2024.12.18 |
Python 코드카타 오답: 짝수의 합 | 배열의 평균값 (0) | 2024.12.17 |
Python 개인 과제 풀이 (1) | 2024.12.16 |