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

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

by doo_ 2024. 1. 7.

(16번) x만큼 간격이 있는 n의 개의 숫자

def solution(x, n):
    answer = []
    for i in range(1,n+1) :
        answer.append(x * i)
    return answer
 # answer = answer.append(x * i)는 오류

> 창의적인 답

def number_generator(x, n):
    return [i for i in range(x, x*n+1, x)]
# range x차이만큼, x*n값 까지 출력

 

(17번) 자연수를 뒤집어 배로 만들기

def solution(n):
    answer = []
    a = str(n)
    for i in range(len(a)) :
        answer.append(int(a[i]))
    answer = list(reversed(answer))
    return answer

> 간결한 답

def solution(n):
	return [int(i) for i in str(n)][::-1]

> 창의적인 답

def solution(n):
    return list(map(int, reversed(str(n))))
# 또는
    return list(map(int, str(n)[::-1]))

 

(18번) 문자열을 정수로 바꾸기

def solution(s):
    return int(s)

> 실행속도는 아래가 더 빠르다고 한다.

def solutiont(s):
    result = 0
    size=len(s)
    temp = 0
    if s[0] == '-' :
        sign = -1
    else :
        sign = 1
    for i in range(0, size) :
        if str[i] == '1' :
            temp = 1
        elif str[i] == '2' :
            temp = 2
        elif str[i] == '3' :
            temp = 3
        elif str[i] == '4' :
            temp = 4
        elif str[i] == '5' :
            temp = 5
        elif str[i] == '6' :
            temp = 6
        elif str[i] == '7' :
            temp = 7
        elif str[i] == '8' :
            temp = 8
        elif str[i] == '9' :
            temp = 9
        else :
            temp = 0
        for i in range(size-i-1) :
            temp = temp * 10
        result = result + temp
    result = result * sign
    return result

> 색다른 답

def solution(s): 
    result = 0
    for idx, number in enumerate(s[::-1]):
        if number == '-':
            result *= -1
        else:
            result += int(number) * (10 ** idx)
    return result

(19번) 정수 제곱근 판별

def solution(n):
    answer = 0
    x = n**(1/2)
    if x == int(n**(1/2)) : # x%1 == 0 나머지를 활용할 수 있다. 오우...
        answer = (x+1)**2
    else :
        answer = -1
    return answer

> 창의적인 답

def nextSqure(n):
    return n == int(n**.5)**2 and int(n**.5+1)**2 or 'no'
    # 참이면서 int( )출력 거짓이면 no

 

(20번) 정수 내림차순으로 배치하기

> 비록 아래처럼은 아니지만 결국엔 똑같아서 내가 쓴 답은 pass..

> ex. 문자(str) 'abcdef' 를 list() 하면 .. 'a','b' --- 자동으로 나눠진다는 것을 알게 됨.. ㅎㅎ,,

def solution(n):
    ls = list(str(n))
    ls.sort(reverse = True)
    return int("".join(ls))

> 다른 방법

def solution(n):
    return int("".join(sorted(list(str(n)), reverse=True)));

> 창의적인 답들이 다양하다.