같은 숫자는 싫어
답:
def solution(arr):
stack = []
for a in arr:
if not stack or stack[-1] != a:
stack.append(a)
# elif stack[-1] == a: # 없어도 됨
# continue
return stack
문제 분석 및 해석
배열 arr에서 연속적으로 나타나는 숫자를 하나만 남기고 return 하기
입력
[1,1,3,3,0,1,1]
출력
[1,3,0,1]
>> 풀이생각
스택에 겹치지 않는 요소를 담아 바로 스택을 return해주기!
리뷰.
처음에는 스택에 겹치지 않도록 담은 요소들을 다음 것과 비교하여 다르면 다시 answer에 담아 return해 주어야겠다고 생각했다.
풀이하며 stack에 대한 식을 적다가 answer에 굳이 담지 않아도 stack에 겹치지 않게 담고, return할 수 있음을 깨달았다..
문제를 푸는 방법은 언제나 여러 가지지만
최대한 논리적으로 생각하고 효율적으로 푸는 방식이 없을지 고민하도록 하자^^;
기능 개발
답:
from collections import deque
def solution(progresses, speeds):
answer = []
queue = deque(progresses)
s_q = deque(speeds)
while queue:
cnt = 0
print(queue)
for i in range(len(s_q)):
queue[i] += s_q[i]
print(queue, "+")
while queue and queue[0] >= 100:
queue.popleft()
s_q.popleft()
cnt += 1
if not queue or queue[0] < 100:
answer.append(cnt)
return answer
문제 분석 및 해석
각 기능의 개발 속도가 100%가 되면 서비스에 반영한다.
뒤에 기능이 100%가 되더라도 앞에 있는 기능 먼저 배포한 후 뒤의 기능이 100퍼면 같이 배포한다.
>> 풀이생각
뒤의 기능은 앞 기능이 먼저 배포 된 후에 배포되어야하므로 큐를 사용한다.
1. progresses의 각 요소에게 한 번 반복할때마다 +speed를 해줌
2. 맨 앞 요소가 100이 되었는지 확인, 그 다음 요소들도 100인지 확인 (while 조건)
3. 앞에서부터 제거하며 cnt +1 해주고, 뒤의 queue요소가 100이면 같이 제거하며 계속 더한다.
4. 해당 cnt 를 answer에 append 해주기
주의점
* deque로 progresses, speeds를 모두 deque상태로 만들어주고 길이를 같게 유지해야함
* 모든 while문에서 queue가 존재하는지 계속 확인해주어야한다.
리뷰.
조건식을 만들 때 deque out of range오류를 여러 번 만났다.
첫 for 문에서 더해주면서 오류가 나고있다고 생각해 아래 코드들을 주석처리하고 점검해보았는데, 문제가 없었음.
queue를 사용할 때는 pop한 후에도 queue가 존재하는지 체크하며 while문을 반복하도록 설정해주어야 함을 알게되었다.
수정 전
while queue[0] >= 100:
queue.popleft()
s_q.popleft()
cnt += 1
수정 후
while queue and queue[0] >= 100:
...
스택 큐를 풀어본지 약 2주가 지나 잘 기억하고있는지 점검차 풀어보았다.
생각보다 원리를 잘 기억하고 활용하고 있어서 다행임^*^
한 번 학습한 것을 잘 기억할 수 있게 계속 반복해서 문제를 풀어보자!
굿굿
'알고리즘 풀이' 카테고리의 다른 글
[알고리즘] DFS, BFS | 백준 7576 토마토, 프로그래머스 네트워크 (0) | 2023.10.15 |
---|---|
[알고리즘] DFS, BFS | 2667 단지번호 붙이기, 2606 바이러스 (0) | 2023.10.14 |
[알고리즘, 자료구조] DFS, BFS | 백준 1260 : DFS와 BFS **수정중 (0) | 2023.10.05 |
[알고리즘] 백준 | 1991 트리 순회, 14244 트리만들기 (0) | 2023.09.20 |
[알고리즘] 백준 | 15810 풍선 공장 (0) | 2023.09.10 |