본문 바로가기

Python

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

<문제 1번>

문제 1번

 

<1. 나의 풀이>

 

나는 a = b, a < b, a > b 이렇게 3가지 경우로 나눠서 풀이를 진행하였다.

 

내 머리로는 각각의 경우를 나눠서 코딩하는 것 밖에 떠오르지 않았다...

 

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

 

다른 사람들의 풀이를 보면, 이렇게 return 부분에서 한 줄로 쫙 끝내버리는 경우들이 많았다...

 

이처럼 min, max 함수를 사용해서 한 줄로 끝낼 수도 있구나 ㅎㅎㅎ...

 

 

<문제 2번>

문제 2번

 

<1. 나의 풀이>

 

나는 n이 짝수인 경우와 홀수인 경우를 각각 나눠서 처리해주었다.

 

n이 짝수인 경우에는 그냥 "수박"이라는 문자열 s 를 (n // 2) 번만큼 반복해서 출력하게끔 했고, n이 홀수인 경우에는 짝수인 경우에서 "+ s[0]" 처리만 추가해주었다.

 

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

 

좀 더 효율적인 풀이는 위와 같다.

 

나처럼 바보같이 짝수와 홀수인 경우를 나누지 않고, 슬라이싱을 통해서 간단하게 처리해줄 수 있다!

 

 

<문제 3번>

문제 3번

 

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

 

이 문제는 주어진 seoul 리스트에서 "Kim"의 index를 반환해서 찾아주는 방법으로 코드를 작성했다.

 

내가 풀이한 방식이 다른 사람들의 코드와 거의 유사했기 때문에, 더 효율적인 코드는 따로 더 첨부하지 않겠다.

 

 

<문제 4번>

문제 4번

 

<1. 나의 풀이>

 

약수의 정의는 "어떤 수로 정수가 나누어 떨어지는 것"이므로, 위와 같이 코드를 작성할 수 있다.

 

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

 

내 코드를 한 줄로 압축(?)시켜놓은 풀이 같다.

 

위와 같이 list comprehesion을 사용하면 간단하게 한 줄이면 끝낼 수 있다!!

(앞으로 문제를 풀 때, 리스트 컴프리헨션을 잘 사용해보도록 하자...)

 

 

<문제 5번>

문제 5번

 

<1. 나의 풀이>

 

위처럼 문제를 풀기에 앞서, 우선적으로 입력받는 문자열 s 를 모두 소문자로 처리해주었다.

 

그 후, count() 함수를 사용해서 문자열 내의 'p'의 개수와 'y'의 개수를 비교해주는 식으로 풀이하였다.

 

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

 

전체적인 방법은 내가 했던 방식과 동일하지만, 쓸데없는 코드들을 다 삭제하고 위와 같이 간략하게 입력해도 되는구나...