https://school.programmers.co.kr/learn/courses/30/lessons/42883
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
오답코드
ans = []
num = []
for i in number:
num.append(int(i))
long = len(num) - k
i = 0
while long > 0:
if long == len(num[i:]):
ans.append(num[i])
long -= 1
i += 1
if i == i+long-1 or i == i+long-2:
ans.append(max(num[i:i + long+1]))
i += num[i:i + long+1].index(max(num[i:i + long+1])) + 1
long -= 1
else:
ans.append(max(num[i:i + long - 1]))
i += num[i:i + long - 1].index(max(num[i:i + long - 1])) + 1
long -= 1
print("".join(map(str,ans)))
블로그 참고한 정답코드
def solution(number, k):
answer = []
# 맨 앞의 숫자를 가장 크게 하는 것을 중점으로 하나씩 제거해나감(스택이용)
for n in number:
while answer and answer[-1] < n and k > 0: # 제거횟수 남음? 정답 숫자 하나이상 있음? 가져온 숫자가 정답 맨뒤숫자보다 큼?
k -= 1 # 제거 ㄱㄱ
answer.pop()
answer.append(n) # 나머지는 다 집어넣음
return ''.join(answer[0:len(number) - k])
- 숫자를 문자열로 받아도 크기비교를 할 수 있는 것을 처음 알았다... -> 무지
- 인덱스 슬라이싱으로 푸려고 했다가 [1:1] [1:2] 등의 경우로 인해 굉장히 복잡해지고 결과적으로 틀림. -> 접근방식오류
- 스택을 이용하면 저렇게 깔끔하게 풀 수 있었던 것을...ㅠㅠ 그리디는 정말 알면 쉽고 모르면 한없이 어려운 것 같다.
- 문제를 더 많이 풀어보는 수밖에 없을 것 같다!
'프로그래머스' 카테고리의 다른 글
프로그래머스 92341. 주차 요금 계산 (0) | 2023.11.09 |
---|---|
프로그래머스 72413. 합승 택시 요금 (0) | 2023.11.08 |
프로그래머스 42898. 등굣길 (0) | 2023.11.07 |
86971. 전력망을 둘로 나누기 (0) | 2023.10.31 |
프로그래머스 118666. 성격 유형 검사하기 (0) | 2023.10.27 |