회고
문제 예제에 stack과 queue 활용문제라는 것을 보고, 학습한 stack과 queue를 사용해서 문제를 풀어 보았다. python에는 따로 stack과 queue를 지원하는 모듈? 클래스? 가 없기 때문에 기본 리스트를 이용해서 문제를 해결했다.
문제를 제출 후 다른 사람들이 제출한 코드를 확인했다.
이본에는 다른때 보다 더 나을거야라는 나의 생각을 무참히 짓밝듯 다른 사람들의 코드는 나와는 달랐다.
처음 문제에서 stack과 queue라는 것에 내 사고 방식이 갇혀서, 더 좋은 코드를 생각하지 못했던 것이다.
코드를 구현하는 것에는 정답은 없다.
하지만 좋은 코드와 나쁜코드는 존재한다. 마치 내 코드처럼말이다.
이번에는 새로운 자료구조를 사용했다는 점에서 좋았다고 생각하나, 그 이외에도 문제를 해결할 수 있는 방법이 있었는데, 생각하지 못했던 점이 아쉽다.
다른 사람들의 코드를 보면서, 굳이 어려운 것을 사용하는 것이 아닌 기본적인 것을 사용해서 문제를 풀이하는 것을 보았다.
내가 알고있던 슬라이싱을 이용해서 문제를 해결한 코드를 보았는데, 분명 나도 알고 있고 숙지하고 있는 개념인데, 다른 사람들 처럼 문제에 활용해서 접근하는 것이 부족했던 거다.
알고 있는 것으로 끝이 아닌 알고 있는 내용을 어떻게 활용해서 다른 접근이 가능한지를 생각해보고자 하는 계기가 됬다.
같은 숫자는 싫어
https://school.programmers.co.kr/learn/courses/30/lessons/12906
def solution(arr):
queue = []
stack = []
stack.append(arr[0])
for i in range(1, len(arr)):
if arr[i] in stack:
continue
queue.append(stack.pop())
stack.append(arr[i])
queue.append(stack.pop())
return queue
arr = [4,4,4,3,3]
result = solution(arr)
print(result)
stack과 queue 개념을 리스트를 이용해서 구현했다.
stack은 위로 쌓이는 자료구조로 나중에 들어간 데이터가 먼저 나온다.
그러므로 맨 위에 있는 데이터가 비교하는 데이터와 같으면 continue
다르면, 현재 stack에 있는 데이터를 pop해서 queue에 넣는다.
queue는 stack과 다르게 먼저 들어간 데이터가 먼저 나온다.
그리고 모든 요소를 돌고 난 뒤 stack에 남아 있는 데이터가 있다면 pop해서 queue에 추가하는 것으로 문제를 해결하는 코드를 작성했다.
def no_continuous(s):
a = []
for i in s:
if a[-1:] in [i] :
continue
a.append(i)
return a
s = [4,4,4,3,3]
result = no_continuous(s)
print(result)
다른 사람이 구현한 코드이다.
stack과 queue의 개념이 아닌 슬라이싱을 이용해서 a[-1:]
라는 새로운 리스트를 만들어서 [i]
라는 리스트와 비교해서 만약 같다면 continue,
다르다면 빈 리스트에 append하는 식으로 구현했다.