본문 바로가기

Python

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

<문제 1번>

 

<1. 나의 풀이>

 

이 문제는 주어진 문자열이 숫자로 구성되어 있는지를 확인해주는 isdigit() 함수를 사용하면 간단하게 풀 수 있다.

 

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

 

위처럼 len(s) in (4, 6) 이런 식으로 코드를 구현해주면, 나처럼 if 문을 2번 쓰지 않고도 코드를 작성할 수 있다. 

 

 

<문제 2번>

 

<1. 나의 풀이>

 

나는 이 문제를 "선택 정렬" 알고리즘을 사용해서 풀어보았다.

 

먼저 최댓값의 index 값을 찾아주는 find_max_idx() 함수를 만들고, 만들어진 find_max_idx() 함수를 사용해서 최댓값을 차례대로 뽑아내주는 방법으로 구현했다.

 

** 아래의 링크는 "선택 정렬" 알고리즘에 대한 설명과 코드를 적어놓은 사이트이다. 참고하자!!

<출처: 모두의 알고리즘 with 파이썬>

https://thebook.io/006935/partxt/xa/08/

 

모두의 알고리즘 with 파이썬: 08 선택 정렬

 

thebook.io

 

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

 

물론 나처럼 "선택 정렬" 알고리즘을 사용하지 않고도, 위와 같이 훨씬 더 간단하게 문제를 풀 수도 있다.

 

sorted를 사용해서 문제를 풀면 정말 간단하게 풀리지만, 이렇게 푸는게 과연 알고리즘 공부에 도움이 될까...? 하는 의문이 든다.. (누가 누굴 가르치는건지...내 공부나 똑바로 하자...)

 

 

<문제 3번>

 

<1. 나의 풀이>

 

이 문제도 pop() 함수를 사용해서 리스트의 맨 마지막 요소 값들을 추출하면 쉽게 풀 수 있다.

 

단, 주어진 n 이 int 형이므로 list(str(n)) 를 통해 문자열로 변경된 n 을 다시 리스트로 변환해주어야 한다!!

 

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

 

위와 같이 reversed() 함수를 사용하면 정말 정말 간단하게 풀 수가 있네..? ㅋㅋㅋㅋㅋ

 

잘 기억해두자... reveresed() 함수!!

 

 

<문제 4번>

 

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

 

이 문제는 슬라이싱을 통해 간단하게 풀 수 있다.

 

뒤에서 4자리 수만 남기고, 나머지 숫자들은 "*" 처리해주는 식으로 풀어보았다.

 

이게 가장 효율적인 방법인 듯 싶다.

 

 

<문제 5번>

 

<1. 나의 풀이>

 

이 문제...푸는데 좀 많이 오래 걸렸다 ㅎㅎㅎㅎ 오래걸릴 문제가 아니었는데 ㅜㅜ...멍청한 나란 놈...

 

for 문을 2번 쓰다보니, i 값을 설정하는데 있어서 좀 헷갈렸다.

 

그래도 일단 풀긴 했으니...조금 더 간단하게 풀 수 있는 방법이 없나 싶어 다른 사람들의 코드를 확인해보았다.

 

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

 

역시....list(map(lambda x: ~~~)) 를 사용하면 한줄로 뽝!! 끝낼 수가 있었다.

 

알고리즘 문제들을 풀면서 이러한 풀이 방식은 정말 많이 보았다.. 자주 사용되는 만큼 잘 기억해두어야 할 것 같다!!