💡 스택을 활용한 사고력을 키우자..

<오답 코드>
import sys
input = sys.stdin.readline
N = int(input())
cnt = 0
group = [0] * N
stack = []
for i in range(N):
group[i] = int(input())
# 본인 보다 뒤만 카운트 하기
for j in group:
while stack:
if j >= stack[-1]:
cnt += len(stack)
stack.pop()
else:
break
stack.append(j)
if len(stack) > 1:
print(cnt + len(stack))
else:
print(cnt)
<정답 코드>
import sys
input = sys.stdin.readline
N = int(input())
cnt = 0
stack = []
for _ in range(N):
height = int(input())
same = 1 # 현재 키를 가진 사람의 개수
# 스택에서 자신보다 작거나 같은 키 제거
while stack and stack[-1][0] <= height:
cnt += stack[-1][1] # 해당 그룹의 사람들은 전부 볼 수 있음
if stack[-1][0] == height:
same += stack[-1][1] # 같은 키가 연속되면 그룹화
stack.pop()
# 스택에 현재 키 추가
if stack:
cnt += 1 # 바로 앞의 사람과는 무조건 볼 수 있음
stack.append([height, same])
print(cnt)
💡 코테스터디 중 나온 기발한 접근법
논리적인 접근이 정말 어려웠다고 모두들 생각하였다.
결국 대부분의 사람이 hint를 참고하여 풀었고, 거의 비슷한 방식으로 풀이했던 것 같다.
