알고리즘/코딩테스트 문제 정리
[99클럽] 왜지...?
고래강이
2025. 2. 4. 20:16
☄️문제 풀기 전 내 생각
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값을 바꿔야하는지 모르겠음