개발일기 [Python 파이썬]

[파이썬] 홀수 짝수 배수 조건 따라 새로운 리스트 출력하기

neullo 2024. 3. 15. 13:50

리스트에서 n의 배수가 아닌 수 제거한 배열

Q. 정수 n과 정수 배열 numlist가 매개변수로 주어질 때, numlist에서 n의 배수가 아닌 수들을 제거한 배열을 return 하도록 solution 함수를 완성해 주세요.

A. numlist 리스트 안에 n 배수(if num % n == 0)로만 채워지게 만들면 된다. 즉 들어있는 숫자를 for문으로 돌면서(for 숫자 in 리스트)  n으로 나눴더니 0이 나온 숫자면 된다.

 

def solution(n, numlist):
    return [num for num in numlist if num % n == 0]

 

Another way of doing it is below. 새로운 리스트 만들어주고, 리스트 안에 넘버들 돌면서 만약 n으로 나눈 값이 0이면 새로운 리스트에 append 추가해 넣어줘 시키면 된다.

def solution(n, numlist):
    newlist = []
    for num in numlist :
        if num % n == 0 :
            newlist.append(num)
    return newlist

 

 


홀수라면 곱하고 짝수라면 더해라

리스트와 숫자(k) 주고 숫자가 조건에 맞으면 리스트에 추가하여 새로운 리스트 출력 

Q. 정수 배열 arr와 자연수 k가 주어집니다. 만약 k가 홀수라면 arr의 모든 원소에 k를 곱하고, k가 짝수라면 arr의 모든 원소에 k를 더합니다. 이러한 변환을 마친 후의 arr를 return 하는 solution 함수를 완성해 주세요.

A. 모든 정수는 홀수가 아니라면 짝수이기에, 홀수 혹은 짝수 하나만 정의하면 else로 나머지를 구분해 정렬할 수 있다. 

k%2 == 1 은 홀수

k%2 == 0 은 짝수 

이렇게 두 번 해줄 필요 없다는 뜻이다. 한번 홀수면 곱해라. 아니라면 더해라. 해주고 그 대상을 넣어주기 위해 for 숫자 in 리스트 해주면 끝

def solution(arr, k):
    return[num*k if k%2 == 1 else num+k for num in arr]

50보다 작은 홀수라면 2 곱하고,  50 보다 크거나 같은 짝수라면 2로 나눠라

 

리스트에서 조건별 다른 내용 출력 (50보다 크면 )

Q. 정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱합니다. 그 결과인 정수 배열을 return 하는 solution 함수를 완성해 주세요.

A. num*2 로 곱해라 if 만약 num숫자가 50보다 작고 그리고 2로 나눴는데 0이 아닌 홀수라면. else num//2해라. 만약 50보다 크거나 같은 짝수라면.  

 

여기서는 홀수, 짝수처럼 모 아니면 도 인 2개의 옵션이 아닌 50보다 큰 것 혹은 50보다 작으나 50을 포함한 수와 같이 다른 조건이 있다. 이런 경우 하나씩 넣어주어야 한다.

def solution(arr):
    return [(num * 2) if (num < 50 and num % 2 != 0) else (num // 2) if (num >= 50 and num % 2 == 0) else num for num in arr]

 


***여기서 주의할 점 else num for num in arr

"50보다 작은 홀수"와 "50보다 크거나 같은 짝수" 두 개의 경우의 수를 주었지만, 그 외의 주어진 리스트의 각 원소에 대해 조건이 만족되지 않을 때 기본값을 지정해야 한다. 만약 조건에 해당하는 값이 없을 때 반환되는 값을 명시해 주기 위해 사용된다.

 

따라서, else num은 어떤 조건에도 해당하지 않는 경우에는 해당하는 원래의 값인 num을 반환하도록 합니다. 이렇게 하면 조건에 해당하는 경우에만 값을 변경하고, 그 외의 경우에는 원래의 값을 그대로 사용할 수 있습니다.

 


 

numbers 주고 하나씩 더하다가 특정 number 보다 커지는 순간 더했던 원소 합 출력

Q. 정수 배열 numbers와 정수 n이 매개변수로 주어집니다. numbers의 원소를 앞에서부터 하나씩 더하다가 그 합이 n보다 커지는 순간 이때까지 더했던 원소들의 합을 return 하는 solution 함수를 작성해 주세요.

A. For문을 돌며 리스트의 값을 하나씩 체크해서 계속해서 새로운 값을 만들어 내야 하기때문에 새 리스트를 0으로 초기화 해주고 시작한다. 체크할 리스트 for문으로 지정해주고, 아까 처음에 만든 새로운 리스트에 쌓인 값들을 계속해 하나씩 더하며 누적된 합을 계산하도록 하게 해주고 if 문을 통해 그 합이 n 보다 큰지 확인하고 만약 n보다 커지면 협재까지 더합 합을 반환하고 종료하게 한다.

 

- total_sum = 0: 변수 total_sum을 0으로 초기화해서 나중에 새롭게 누적된 합을 저장.

- for num in numbers:: 리스트 numbers의 각 원소에 대해 반복할 리스트를 지정.

- total_sum += num: total_sum 에 현재 원소인 num을 더합니다. 이렇게 하면 리스트의 원소를 하나씩 더하면서 누적된 합을 계산.

- if total_sum > n:: 누적된 합인 total_sum이 주어진 값 n보다 큰지 확인

- return total_sum: 합이 n보다 커졌을 때 현재까지 더한 합인 total_sum을 반환하고 함수를 종료

- return total_sum: 반복문이 끝나고 여전히 합이 n보다 크지 않으면, 즉 모든 원소를 다 더한 결과가 n 이하이면 누적된 합을 반환

def solution(numbers, n):
    total_sum = 0
    for num in numbers:
        total_sum += num
        if total_sum > n:
            return total_sum
    return total_sum