-
[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값을 바꿔야하는지 모르겠음
'알고리즘 > 코딩테스트 문제 정리' 카테고리의 다른 글
[Baekjoon] 단계별 문제 - 2차원 배열 (0) 2025.02.25 [백준] 이분탐색 실버 (0) 2025.02.11 [99클럽] stack 구현 (0) 2025.02.03 [99클럽] 이분탐색 활용 (0) 2025.01.22 [99클럽] dict 활용 초급 (1) 2025.01.20