ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [99클럽] 왜지...?
    알고리즘/코딩테스트 문제 정리 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값을 바꿔야하는지 모르겠음

    댓글

Designed by Tistory.