-
BOJ 1874 - 스택 수열코딩테스트 2023. 3. 19. 20:30
https://www.acmicpc.net/problem/1874
스택의 개념이 조금 들어간 재밌는 문제가 보여서 풀어봤습니다. 난이도는 실버3 이었던 것 같구요. 파이썬으로 간단하게 해결했습니다.
파이썬이라 따로 STL로 스택 컨테이너를 만들 필요가 없더라구요.
간단하게 입출력을 받고 스택 역할을 할 리스트와 결과를 담을 리스트를 초기화해주었습니다.
처음에는 이 수열을 만들 수 있는지 없는지를 검사하는 함수를 먼저 짜려고 했다가, 그럴 필요 없이 그냥 반복문에서 스택의 마지막 원소와 만들고자 하는 수열을 계속 비교해주면 되겠더라구요.
이 문제를 풀면서 확실하게 배운 점은 다음과 같습니다.
1. 조건문을 작성할 때 조건들의 순서를 잘 고려해주기.
처음 while문의 조건을 작성할 때,
while stack[-1] == arr[0] and len(arr) > 0:
과 같이 작성했는데, 이 때 and 의 앞부분에서 stack과 arr가 비어있는 경우에도 비교를 진행하기 때문에 잘못된 인덱스에 접근했다는 에러가 뜨게 됩니다. 이를 방지하기 위해
while len(arr) > 0 and stack[-1] == arr[0]:
이와 같이 array가 비어 있지 않음을 먼저 확인해야 합니다. and로 묶여 있다고 순서를 다 뭉뚱그리지 않기!!
2. python에서의 removefront는 del과 pop으로 할 수 있다.
리스트의 맨 첫 요소를 삭제하는 두 명령어의 차이가 궁금해서 chatgpt에게 물어보니까 다음과 같은 답변을 얻었습니다. 결론 : del 을 쓰자!! 삭제할 요소를 반환받을 필요가 있는 경우에만 pop을 쓰기!
재밌는 문제였어요.
'코딩테스트' 카테고리의 다른 글
BOJ 1463 1로 만들기 python (0) 2024.04.15 BOJ 1064 - 평행사변형 (0) 2023.03.19 숫자 문자열과 영단어 (0) 2023.03.11 옹알이(1) (0) 2023.03.11 코딩테스트 공부 시작! (0) 2023.03.08