본문 바로가기
[스파르타코딩클럽]데이터분석 과정/PYTHON

[Python 코드카타] 11 ~ 15번 (프로그래머스)

by doo_ 2024. 1. 6.

(11번) 짝수와 홀수 구하기

def solution(num):
    answer = ''
    if num%2 == 0 :
        answer = 'Even'
    else :
        answer = 'Odd'
    return answer
def solution(num):
    return "Even" if num%2==0 else "Odd"
# even을 출력해라 만약 나머지가 0이라면 / 아니면 odd를 출력해라

> 창의적인 답 : True ( 1 ) , False ( 0 )을 활용

def solution(num):
    if num%2:
        return "Odd"
    return "Even"

 

(12번) 평균 구하기

def solution(arr):
    answer = 0
    n = len(arr)
    for i in arr :
        answer += i
        n += 1
    answer = answer / n
    return answer

> list가 null인 경우도 고려 👏

def average(list):
    if len(list) == 0:
        return 0
    else:
        return sum(list) / len(list)

# 아래는 테스트로 출력해 보기 위한 코드입니다.
list = [5,3,4] 
print("평균값 : {}".format(average(list)));

 

(13번) 자릿수 더하기

def solution(n):
    answer = 0
    for i in str(n) :
        answer += int(i)
    return answer
-----------
# 한 줄로 표현
def solution(n):
    return sum([int(i) for i in str(n)])
    
print("결과 : {}".format(solution(n)));

> 재귀함수를 활용.. 👏👏

def sum_digit(number):
    if number < 10:
        return number
    else:
        return (number % 10) + (sum_digit(number // 10))
        # 1의 자리, 2의자리, > > > n의 자리

 

(14번) 약수의 합

def solution(n):
    answer = 0
    for i in range(1,n+1) :
        if n % i == 0 :
            answer += i
    return answer
# 한 줄로 표현
def solution(n):
	return sum([answer for i in range(1,n+1) if n%i ==0])

> 조금 더 파고들면

def sumDivisor(num):
    # num / 2 의 수들만 검사하면 성능 약 2배 향상
    return num + sum([i for i in range(1, (num // 2) + 1) if num % i == 0])
    # num/2를 넘는 수로 num을 나눌 수 없다는 점을 활용

(15번) 나머지가 1이 되는 값 찾기

def solution(n):
    answer = 0
    for i in range(1,1+n) :
        if n%i == 1 :
            answer = i
            break
    return answer

> 리스트 활용

def solution(n):
    return [x for x in range(1,n+1) if n%x==1][0]
# 또는
def solution(n):
    answer = min([x for x in range(1, n+1) if n % x == 1])
    return answer

> 창의적인 방법

def solution(n):
    answer = 0
    for divisior in range(2, (n-1//2) +1) : #2부터~반값까지 
        if (n-1) % divisior == 0: #약수가 있다면
            answer = divisior 
            break #탈출
        else: 
            answer = n-1 #약수가 없다면 본인
    return answer

> 성능향상을 위해서 해당 값의 반을 쪼개서 계산하는 방식들에 대해서 한 수 배울 수 있었다. 아직 활용은 무리지만 이렇게 계속 접함으로써 나중에 활용해보려고 한다.