개발일기 [Python 파이썬]

[파이썬] for x in range 홀수 짝수에 따라 다른 값 & 순회하며 계산하는 반복자(iterator)

neullo 2024. 3. 14. 12:06

 

홀짝에 따라 다른 값 반환하기

양의 정수 n이 매개변수로 주어질 때, n이 홀수라면 n 이하의 홀수모든 양의 정수의 합을 return 하고 n이 짝수라면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 return 하는 solution 함수를 작성해 주세요.

 

먼저 주어진 조건부터 적어보자. 만약 n이 짝수라면 2로 나누어서 몫이 0이 될것이다if n % 2 == 0: . 홀수를 구해보자. if 만약 n%2 한 값이 0이 아니라면 if n % 2 != 0: 짝수가 아닐 것이다. !표를 넣어서 아니다를 만들어준다. 코드에서는 먼저 주어진 정수 n이 홀수인지 짝수인지를 판별하고, 그에 따라 적절한 계산을 수행하여 반환한다. 홀수인 경우에는 n 이하의 홀수의 합을, 짝수인 경우에는 n 이하의 짝수의 제곱의 합을 계산하여 반환다.

def solution(n):
    if n % 2 != 0:  # n이 홀수인 경우
        return sum(range(1, n + 1, 2))  # 1부터 n까지의 홀수의 합을 반환
    else:  # n이 짝수인 경우
        return sum(x**2 for x in range(2, n + 1, 2))  # 2부터 n까지의 짝수의 제곱의 합을 반환

# 예시 테스트
print(solution(5))  # 예상 결과: 9 (1 + 3 + 5)
print(solution(6))  # 예상 결과: 56 (2^2 + 4^2 + 6^2)

 

몫이 1이면 홀수라고 해줄 수도 있다. 

def solution(n):
    if n % 2 == 1:  # 홀수인 경우
        return sum(range(1, n + 1, 2))  # n 이하의 홀수의 합을 구하여 반환
    else:  # 짝수인 경우
        return sum(x**2 for x in range(2, n + 1, 2))

 

  1. 홀수일 경우, 1부터 n까지의 홀수의 합을 구합니다. 이를 위해 range() 함수를 사용하여 1부터 n까지의 숫자 중에서 2씩 증가하는 홀수를 생성하고, sum() 함수를 사용하여 이들의 합을 구합니다.
  2. 짝수일 경우, 2부터 n까지의 짝수의 제곱의 합을 구합니다. 이를 위해 range() 함수를 사용하여 2부터 n까지의 숫자 중에서 2씩 증가하는 짝수를 생성하고, 리스트 컴프리헨션을 사용하여 이들의 제곱을 구합니다. 그리고 다시 sum() 함수를 사용하여 이들의 합을 구합니다.

특히 이부분을 보자.

리스트 컴프리헨션: 반복자(iterator)

(x**2 for x in range(2, n + 1, 2))
는 2부터 n까지의 짝수를 순회하는 반복자(iterator)를 생성합니다. 이 반복자는 2에서부터 시작하여 2씩 증가하며 n까지의 짝수를 생성합니다. 그리고 각 짝수에 대해 제곱을 계산하여 새로운 리스트에 저장하는 것이죠.

따라서
(x**2 for x in range(2, n + 1, 2))
는 2부터 n까지의 짝수에 대해 제곱을 계산하는 반복자(iterator)를 생성하는 것입니다.


함수의 세 인자: range() 함수

(2, n + 1, 2)는 range()
range() 함수는 시작(start), 끝(stop), 증가(step) 세 개의 매개변수를 받습니다.

1. 시작(start): 숫자 시퀀스의 시작을 나타내는 정수입니다. 여기서는 2로 지정되어 있습니다.
2.  증가(step): 각 숫자 간의 간격을 나타내는 정수입니다. 여기서는 2로 지정되어 있습니다. 따라서 홀수를 건너뛰고 짝수만 포함하는 것입니다.
3. 끝(stop): 숫자 시퀀스의 끝을 나타내는 정수로, 이 값은 포함되지 않습니다. 여기서는 n + 1로 지정되어 있습니다. 따라서 숫자 시퀀스는 2부터 n까지이며, n도 포함됩니다.

따라서 (2, n + 1, 2)는 2부터 n까지의 숫자 중에서 2씩 증가하는 짝수 시퀀스를 나타냅니다.

 

 


다른 사람들이 짠 기발한 코드들을 배워보자. 위는 가독성이 좀더 좋고 아래는 창의적이다.

def solution(n):
    if n%2:
        return sum(range(1,n+1,2))
    return sum([i*i for i in range(2,n+1,2)])

 

오늘도 한줄로 요약하는 놀라운 분들이 계신다. 천재인가..? 배워갑니다.

def solution(n):
    return sum(x ** (2 - x % 2) for x in range(n + 1) if n % 2 == x % 2)