고래강이 2025. 2. 4. 20:16

백준 17608번

 


 

 

☄️문제 풀기 전 내 생각

list에 값을 넣고 set을 통해 중복을 제거한 뒤 마지막 요소보다 크거나 작은 것의 개수를 구하면 될 것 같다.

소요시간: 40분

 


 

🌈 파이썬 코드

def begginer():
    N = int(input())
    result = []
    stick = []
    for _ in range(N):
        stick_height = int(input())
        stick.append(stick_height)
    set_stick = set(stick)
    last = stick[-1]
    for i in set_stick:
        if i >= last:
            result.append(i)
    return len(result)

print(begginer())
  • 틀렸다... 예제 값을 넣었을 때에는 성공하는데 어디서 문제가 발생하는지 생각해보자.
  • 일단 indexError나 시간초과가 아닌 틀렸습니다가 나온 것을 보면 테스트 케이스가 다른 것이 들어왔을 때 문제가 있는 것 같다.
  • 반복문과 input()은 틀렸을리 없으니 다른 부분을 수정해서 만들어보자 딱 10분만 더 해보고 모르겠으면 답봐야지...ㅎ
  • 숫자가 이전보다 클 경우에는 어짜피 앞의 기둥이 안보이므로 이전 값을 초기화해도 될 것 같다. 근데 이게 더 힘든데?
  • 잘 모르겠다 아래와 같이 고치긴 했지만 사실 위 식을 좀 더 간단화한거라서 잘 모르겠음
# 막대기 브론즈 2

def begginer():
    N = int(input())
    sticks = set()
    count = 0
    last_stick = 0
    for i in range(N):
        curr_stick = int(input())
        if i == (N - 1):
            last_stick = curr_stick
        sticks.add(curr_stick)
    for i in sticks:
        if i >= last_stick:
            count += 1
    return count

print(begginer())

 

아니 정답은 아래와 같다

import sys

input = sys.stdin.readline

N = int(input())
stack = []

for _ in range(N):
    stack.append(int(input()))

last = stack[-1]
count = 1

for i in reversed(range(N)):
    if stack[i] > last:
        count += 1
        last = stack[i]

print(count)
출처: https://tooo1.tistory.com/521 [개발자 퉁이리:티스토리]

 

  • 근데 이해가 안가는데 마지막 값을 기준으로 큰 애들만 골라내면 되는건데 왜 자꾸 last값을 바꿔야하는지 모르겠음