코드시그널 아케이드 파이썬 10 번 풀이
인트로의 지옥을 벗어났구요.. 그래프를 풀려면, 자바같은 ge가튼 언어는 별로 더라구요.
자 파이썬을 시작해보겠습니다. 조금 배워보니 왜 파이썬 파이썬 하는지 알겠더군요.
약간 자바보다는 안정감이 떨어지지만(?) 개인적으로
유연하고 간편하다? 라는 느낌을 받았습니다. 자 시작해볼까요!!
공감 버튼♥눌러주시면 더욱 많은 포스팅을 올리는데 힘이 됩니다!부탁드려요 ^^ 돈드는거 아니잖아요~
문제 해설
Implement the missing code, denoted by ellipses. You may not modify the pre-existing code.
Let's call a list beautiful if its first element is equal to its last element, or if a list is empty. Given a list a, your task is to chop off its first and its last element until it becomes beautiful.
Implement a function that will make the given a beautiful as described,
and return the resulting list as an answer.
Hint: one of the features introduced in Python 3 called extended unpacking could help here.
문제를 보시면, 주어진 리스트에서, 양쪽 끝부분을 짤라달라는 것입니다.
그러다가 양쪽 끝, 처음 값이 같을때, 그 자르는 행위를 멈추고 리턴해달라는 문제입니다.
이게 이쁘데요. 이해가 안되요.
- For a = [3, 4, 2, 4, 38, 4, 5, 3, 2], the output should be listBeautifier(a) = [4, 38, 4].
Here's how the answer is obtained:
[3, 4, 2, 4, 38, 4, 5, 3, 2] => [4, 2, 4, 38, 4, 5, 3] => [2, 4, 38, 4, 5] => [4, 38, 4].
- For a = [1, 4, -5], the output should belistBeautifier(a) = [4].
- a = [] >>> []
두번째 예시를 보면, 양쪽이 달라서 잘랐습니다. 그리고 한개의 값이 남았습니다. 이런 경우 그대로 한개의 값만 리턴.
새번째 예시는 아예 아무것도 없는 리스트입니다. 이런경우는 [] 것 그대로 리턴입니다.
자 이제 어느정도 익혔으니 답안을 보겠습니다.
해결
def listBeautifier(a):
res = a[:]
while res and res[0] != res[-1]:
res = res[1: -1]
res = res
return res
extended unpacking이니 뭐니 힌트라는데 개무시하고 그냥 풀었습니다.
저는 일단 전체 리스트를 복사했습니다.
res = a [:]
이렇게 명령하면, a 의 모든 값을 res에 넣을 수 있습니다. 정말 간편해요.. (미쳤어 파이썬...)
다음은 While반복문입니다.
조건을 res and res[0] != res[-1] 으로 잡았습니다.
while res and res[0] != res[-1] :
여기서 res 를 넣은 이유는 세번째 예시 [] 비어있는 값의 경우를 잡아주기 위함입니다.
그리고 나머지 조건, 처음과 끝 값이 같지 않다면! 아래의 작업을 해라..라는 명령입니다.
res = res[1:-1]
res = res
저는 그냥 꼼수로 맨뒤의 값과 처음값을 뺀 나머지를 Res로 선어하여 풀었습니다.
res = res는 불필요한 작업이지만, 이 그지같은 문제에서는 extended unpacking을 사용하게 하고자 이렇게 한듯합니다.
이렇게 하면 꼼수지만 풀어지긴 합니다.
그러나,,, unpacking에대해 알아보니 훨씬 간편하고 재밌네요.
unpacking은 *을 사용하는 방법인데,
start, *res, end = res
라고 선언해버리면, Res에는 start, end양 끝 값만 제거하고 res가 들어갑니다.
패키징한다고 보면되는데, 정말 심박하네요.
이것저것 투닥 투닥 쳐보니...
awesome = [3, 4, 5, 3, 2]
one, two, *middle, end = awesome
print(end)
print(middle)
print(awesome)
OUTPUT :
2
[5, 3]
[3, 4, 5, 3, 2]
뭐 이런식으로 사용도 되네요. 신기합니다.
꼭 같은 변수면으로 안해도 되고, 원하는 변수명에 들어가게 할수도 있네요. 재밌습니다.
유용하것어..
이제 엘리트 분들의 답안을 감상하자!!
Python3
def listBeautifier(a):
res = a[:]
while res and res[0] != res[-1]:
_, *res, _ = res
return res
공감 버튼♥눌러주시면 더욱 많은 포스팅을 올리는데 힘이 됩니다!부탁드려요 ^^ 돈드는거 아니잖아요~
'Algorithm > Python' 카테고리의 다른 글
#11_Code Signal Arcade Python :: String Definition (0) | 2020.08.04 |
---|---|
#09_Code Signal Arcade Python :: Mex Function (0) | 2020.07.30 |
#08_Code Signal Arcade Python :: Base Conversion (0) | 2020.07.29 |