상세 컨텐츠

본문 제목

[PYTHON] 프로그래머스 1 ~8번 풀이

Python

by ollive 2024. 7. 4. 22:51

본문

파이썬 1번에서 10번 문제는 solution함수에 변수를 선언하여 계산식을 작성하는 문제이다. 

파이썬 1번: 두수의 차

def solution(num1, num2):
    return(num1-num2)

 

int를 통해 숫자를 정수로 지정하는 방법도 2가지가 있다. 문제에서 제시한 조건은 정수는 아니였지만, 변수 뒤에 : 을 붙이거나 int( )로 감싸서 표현할 수 있었다.

def solution(num1:int, num2:int)->int:
    answer = num1 - num2
    return answer

def solution(num1, num2):
    answer = int(num1) - int(num2)
    return answer


lamda 함수로도 구할 수 있었는데 lambda 매개변수 : 표현식으로 작성할 수 있다. 따로 변수선언을 안하고 표현할 수 있어 가장 간단한 식으로 보인다.

solution = lambda num1, num2 : num1 - num2

파이썬 2. 두수의 곱

1번 문제에서 연산기호만 *로 바꿔서 풀었다.

def solution(num1, num2):
    return num1 * num2


다른 풀이로는 곱셈의 수학적 개념을 이용한 풀이이다. return값을 while을 통하여 num2의 갯수만큼 더해주는 것이다. 변수 n은 0부터 num2가 될때까지 반복적으로 아래 조건식을 수행하며 1씩 커진다. 그때, num1은 자신의 수를 한번씩 더해주며 자가증식을 하여 num1 을 num2개 더하는 결과가 나오게 된다. 

def solution(num1, num2):
    n = 0
    multipl = 0
    while n < num2:
        multipl = multipl + num1
        n = n + 1
    return multipl

 

곱셈 역시 람다식으로 표현할 수 있다.

solution = lambda num1, num2 : num1 * num2


변수 앞에 *을 사용하여 푼 풀이를 찾았다. 매개변수 앞에 *을 붙이면 가변인자로 사용한다는 뜻이다. 가변인자는 매개변수(num1)의 자리에 오는 모든 값에 대해서 모두 처리를 한다는 의미이다. 아래 식에서 num1만 정의되고, num2가 정의 안되어 있는 이유이다. 식 아래에 있는 사진1을 보면 num1자리에 넣은 모든 값이 출력되는 것을 볼 수 있다. 

따라서 아래 식에서 return 으로 num1의 첫번째 값[0]과 두번째 값[1]을 곱해주어 결과를 도출하는 것으로 해석할 수 있다.

def solution(*num1):
    return num1[0]*num1[1]

사진 1


파이썬3. 몫구하기

/로 나누어주면 몫과 나머지가 함께 return되므로 int를 사용하여 정수부분만 가져왔다.

def solution(num1, num2):
    return int(num1/num2)

 

lambda를 활용하여 몫을 구하는데 위에서 알게된 *매게변수식을 사용해 보았다. 2번째와 같이 계산식에 //가 아닌 /를 사용하고 int로 묶어주어도 결과가 같았다.

solution = lambda *num1 : num1[0]//num1[1]
solution = lambda *num1 : int(num1[0]/num1[1])


파이썬의 내장함수 divmod ( )를 사용해서 구할 수 있다는 것도 찾아냈다. div mod는 몫과 나머지가 각각 작성되어, 아래 사진2와 같이 결과가 나온다.따라서 return을 통해 그 중 첫번째 값인 몫만 가져오도록 [0]을 설정해주면 된다.

def solution(num1, num2):
    return divmod(num1, num2)[0]

사진 2


파이썬 4 나이 출력

나이는 단순한 계산식에 +1을 해서 구할 수 있다.

def solution (age):
    return(2022 - age + 1)


파이썬 5 숫자 비교하기

이 문제를 풀면서 어려웠던 부분은 논리식에 ==을 사용해야 한다는 것이다. =은 변수를 선언할 때 사용하므로 조건이나 논리식에는 ==을 사용한다.

def solution(num1, num2):
    if num1 - num2 == 0:
        return 1
    else:
        return -1

 

if를 간단할 수식으로도 작성할 수 있다. 참일때도출할값 if 조건식 else 거짓일때도출할값 순으로 작성하며, ','를 사용하지 않아야 한다.

def solution(num1, num2):
    return 1 if num1 - num2 == 0 else -1


앞서 사용했던 *매개변수와 != 연산자를 이용하여 조건이 거짓일 때를 먼저 표현하는 식을 만들어 보았다.

def solution(*num1):
    return -1 if num1[0] != num1[1] else 1


파이썬 6 두 수의 합

앞서 '두 수의 차'나 '두수의 곱'과 풀이가 같다.

def solution(num1, num2):
    answer = num1+num2
    return answer

 

따라서 앞에서 배운 방법들로 풀이를 간단하게 만들어 보았다.

solution = lambda *num: num[0]++num[1]

파이썬 7 두 수의 나눗셈

정수부분만 리턴하도록 int로 묶었다. 나눈 후에 1000을 곱해주는데 수식의 순서대로 수행하는 것을 알 수 있다.

def solution(num1, num2):
    return int(num1/num2*1000)

 

int를 사용하지 않고도 1로 나누어주며 몫만 구해오는 방법도 있었다.

def solution(num1, num2):
    answer = ((num1/num2)*1000)//1
    return answer

파이썬 8 각도기

if를 사용하여 예각, 직각, 둔각, 평각을 구분하였다.

def solution(angle):
    if angle < 90:
        return 1
    elif angle == 90:
        return 2    
    elif angle < 180:
        return 3
    else:
        return 4

 

if를 한줄로 사용작성하였다.

def solution(angle):
    return 1 if angle < 90 else 2 if angle == 90 else 3 if angle <180 else 4

 

각도가 90과 180을 기준으로 나뉘므로 90을 기준으로 if로 나눈 후, if 중첩을 사용하여 기준각도 미만과 등호로 구분해보았다.

def solution(angle):
    if angle <= 90 :
        return 1 if angle < 90 else 2
    else:
        return 3 if angle <180 else 4

 

if가 없이 작성된 식을 찾았다. 일단 90으로 나누어 몫을 가져오는데 90보다 작으면 0, 크다면 1, 180과 같다면 2가 도출된다. 여기에 2를 곱해주면 90 미만는 0으로 변화가 없지만 90이상 180미만은 2를 갖게된다. 또 180과 같다면 4가 도출된다. 그럼 1, 2, 3, 4를 만들어내는 과정에서 1, (2), (2)+1, (4)로 기준값(90,180) 보다 작을때 1만 더해주면 구분할 수 있게 된다. 

이를 %로 구했는데 이는 나머지를 추출해준다. 기준값인 180은 90의 배수이므로, 90으로 나누었을때 90이나 180이라면 나머지가 0이 나오게 된다. 90이나 180이라면 < 0 이므로 0 값이 도출되고, 나머지가 나온다면 > 0 이므로 1값이 나오게 된다.

def solution(angle):
   return (angle // 90) * 2 + (angle % 90 > 0) * 1

 

 

관련글 더보기