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

[Python 코드카타] 21 ~ 25번 프로그래머스

by doo_ 2024. 1. 8.

21번. 하샤드 수

def solution(x):
    a = list(str(x))
    b = sum(map(int,a))
    if x%b == 0 :
        answer = True
    else :
        answer = False
    return answer

> 한 줄로 표현

def solution(x):
    return x%sum(map(int, list(str(x)))) == 0

> for문에 i in str하면 문자의 각 요소들로 구분되어 입력된다는 것을 이해

def solution(x):
    return n%sum(int(i) for i in str(x)) == 0

 

22번. 두 정수 사이의 합

def solution(a, b):
    answer = 0
    if a == b :
        answer = a
    elif a > b :
        for i in range(0,a-b+1) : 
            answer += b + i
    else :
        for i in range(0,b-a+1) :
            answer += a + i
    return answer

> 간단한 식

def solution(x):
	if a > b :
    	a, b = b, a
	return sum(range(a,b+1))

> m부터 n까지의 합 (1부터 n까지의 합 공식)

def solution(a, b):
    return (abs(a-b)+1)*(a+b)//2

 

23번.  콜라츠 추

def solution(num):
    i = 0
    count = 0
    while i != 1 :    
        if num == 1:
            break
        elif num % 2 == 0 :
            i = num/2
        else :
            i = num*3+1
        num = i
        count += 1
        if count == 500 :
            count = -1
            break
    answer = count
    return answer

> while문 간편식

def solution(num):
    cnt = 0
    while num != 1 and cnt < 500:
        num = 3 * num + 1 if num % 2 else num // 2
        cnt += 1

    return cnt if cnt < 500 else -1

> for문 활용

def solution(num):
    if num == 1:
        return 0
    else :
        for i in range(500):
            num=num/2 if num%2==0 else num*3+1
            if num==1:
                return i+1
    return -1

 

24번. 서울에서 김서방 찾기

> 대소문자 주의...

def solution(seoul):
    answer = '없다'
    if "Kim" in seoul :
        x = seoul.index('Kim')
        answer = f'김서방은 {x}에 있다'
    return answer

> 포맷팅 다른 방법

def solution(seoul):
	return "김서방은 {}에 있다".format(seoul.index('Kim'))
def solution(seoul):
    answer = ''
    return ('김서방은 %d에 있다' %seoul.index('Kim'))

 

25번. 나누어 떨어지는 숫자

def solution(arr, divisor):
    answer = []
    for x in arr :
        if x % divisor == 0 :
            answer.append(x)
    if answer == []:
    # If not answer: 이는 즉 answer가 []빈리스트일 때 False이기 때문
        answer.append(-1)
    answer.sort()
    return answer

> 간단한 식

def solution(arr, divisor):
    arr = [x for x in arr if x % divisor == 0]
    arr.sort()
    return arr if len(arr) != 0 else [-1];

> 한 줄로

def solution(arr, divisor): 
	return sorted([n for n in arr if n%divisor == 0]) or [-1]

 

+ 문제) 같은 숫자는 싫어

> list[i]에서 i가 index 수를 넘어가면 오류

> list[i : i+1]에서 i가 index 수를 넘어가도 오류는 x 다만 빈 리스트

def solution(arr):
    answer = []
    for i in range(len(arr)) :
        if arr[i:i+1] != arr[i+1:i+2] :
            answer.append(arr[i])
    return answer

> 다른 답

def solution(arr):
    answer = []
    answer.append(arr[0])
    for i in arr[1:] :
        if answer[-1:] == [i] :
            pass
        else : 
            answer.append(i)
    return answer

> 다른 창의적인 답

def solution(arr):
    answer = []
    for i in arr :
        if answer[-1:] == [i] : continue
        answer.append(i)
    return answer