목차
샌드위치
현수는 샌드위치를 만들려고 합니다.
식탁에 샌드위치 재료인 식빵과 토마토가 일렬로 놓여 있습니다.
현수가 만드는 샌드위치는 식빵-토마토-식빵 순으로 합쳐서 포장을 합니다. 현수는 식탁에 놓 여 있는 재료의 순서를 유지하면서 샌드위치를 만들어야 합니다.
만약 식탁에 [식빵, 식빵, 식빵, 토마토, 식빵, 식빵, 토마토, 식빵, 토마토, 식빵] 순으로 놓여 있다면 현수는 3번째, 4번째, 5번째를 합쳐서 샌드위치를 만들고, 6번째, 7번째, 8번째를 합 쳐서 샌드위치를 만들고, 2번째, 9번째, 10번째를 합쳐서 샌드위치를 만들어 총 3개의 샌드 위치를 만들 수 있습니다. 매개변수 nums에 식탁에 놓여 있는 샌드위치 재료의 정보가 주어 지면 현수가 만들 수 있는 샌드위치의 총 개수를 반환하는 프로그래을 작성하세요.
제한사항:
• nums의 길이는 1,000을 넘지 않습니다.
• nums[i]값은 1 또는 2입니다. 1은 식빵을 의미하고, 2는 토마토를 의미합니다.
나의 코드
def solution(nums):
answer = 0
stack=[]
for x in nums:
if len(stack)>1 and stack[-1]==2 and stack[-2]==1 and x==1:
stack.pop()
stack.pop()
answer+=1
else:
stack.append(x)
return answer
print(solution([1, 1, 1, 2, 1, 1, 2, 1, 2, 1]))
print(solution([2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1]))
print(solution([1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1]))
print(solution([2, 1, 1, 1, 2, 1, 2]))
print(solution([1, 1, 1, 1, 1, 1, 1]))
이전 문제의 초기 설정 까지 포함한 로직으로 작성하였고 파이썬 리스트 [-1],[-2]를 활용하였다.
정답코드
def solution(nums):
answer = 0
stack = []
for x in nums:
if x == 1 and len(stack) >= 2 and stack[-1] == 2 and stack[-2] == 1:
answer += 1
stack.pop()
stack.pop()
else:
stack.append(x)
return answer
print(solution([1, 1, 1, 2, 1, 1, 2, 1, 2, 1]))
print(solution([2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1]))
print(solution([1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1]))
print(solution([2, 1, 1, 1, 2, 1, 2]))
print(solution([1, 1, 1, 1, 1, 1, 1]))
'코딩테스트[파이썬] > 입문자를 위한 코딩테스트 핵심' 카테고리의 다른 글
[DFS] -검정색 구하기 (0) | 2024.01.23 |
---|---|
[스택과 큐] - 고장난 프린터 (0) | 2024.01.23 |
[스택 과 큐] -연속된 문자 지우기 (0) | 2024.01.23 |
[스택과 큐] -Backspace (0) | 2024.01.23 |
[스택] - 올바른 괄호 (0) | 2024.01.23 |