본문 바로가기

Python

[알고리즘_Programmers] 3주차 문제 및 풀이 (총 5 문제)

<문제 1번>

 

<1. 나의 풀이> = <2. 내 풀이보다 더 효율적인 풀이>

 

위 문제는 zip 함수를 사용하면 정말로 간단하게 풀 수가 있다.

 

이처럼 유용한 함수들은 잘 기억해두었다가 나중에 꼭 써먹자!! ^^

 

 

<문제 2번>

 

<1. 나의 풀이>

 

이 문제도 간단하다.

 

주어진 숫자가 짝수인 경우와 홀수인 경우를 나눠서 처리해주기만 하면 된다.

 

단, 한 가지 주의할 점은 문제에서도 나와있듯이, "0"도 짝수로 처리해주어야 한다는 것이다.

 

<2. 내 풀이보다 더 효율적인 풀이>

 

if 문을 길게 늘어서 쓰지 않고 이렇게 한 줄로 표현할 수 도 있다.

 

 

<문제 3번>

 

<1. 나의 풀이>

 

우선 n 을 문자열로 변환시켜서 각 숫자 별로 쪼갤 수가 있도록 만들어 주었다.

 

그 다음, for 문을 사용해서 각각의 숫자들을 더해주는 방식으로 구현하였다.

 

<2. 내 풀이보다 더 효율적인 풀이>

 

위 코드는 재귀 호출을 사용한 풀이 방식이다.

 

먼저 n 이 한 자리 수인 경우에는 그냥 그 값을 반환해주면 된다.

 

n 이 두 자리 수 이상인 경우에는 재귀 호출을 사용해서, 각각의 자리 수를 더해주는 방식으로 구현했다.

 

 

<문제 4번> - 최대공약수 및 최소공배수 개념 정리 사이트: mathbang.net/206

 

최대공약수와 최소공배수의 관계

최대공약수와 최소공배수를 구하는 방법을 이해했나요? 대부분의 경우에 최대공약수와 최소공배수는 소인수분해를 이용하는 방법으로 구해요. 이 방법은 초등학교 때 많이 해봤던 방법이니까

mathbang.net

 

<1. 나의 풀이>

 

이 문제의 경우, 최대공약수와 최소공배수의 개념을 정확하게 알고 있지 못해서 열심히 구글링을 해본 문제이다...

 

최대공약수의 경우 간단하게 찾아낼 수 있었으나, 최소공배수의 경우 어떻게 찾아내야 할지 전혀 감을 잡지 못했다 ㅠㅠ

 

결국 최소공배수를 찾는 공식을 보고나서야 코드로 구현을 할 수 있었다...나란 놈은 멍청이인가...

 

<2. 내 풀이보다 더 효율적인 풀이>

 

이 문제를 좀 더 효율적으로 처리하기 위해서 다른 사람의 풀이를 보니, "lambda 식" 통해 재귀 호출 방식을 사용한 풀이들이 많았다!

 

세상에....이렇게 간단할 수가 있나...

 

 

<문제 5번>

 

<1. 나의 풀이> = <2. 내 풀이보다 더 효율적인 풀이>

 

이 문제는 n ** 0.5 가 주어진 정수 n 의 제곱근이라는 것만 알면 쉽게 풀 수 있는 문제이다.

 

간단한 문제이므로 더 이상의 설명은 하지 않겠다.