알고리즘/프로그래머스
큰 수 만들기
happenundo
2024. 5. 16. 21:59
728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
그리디 문제다.
그리디는 정말... 풀이가 딱 떠오르지 않으면 푸는데 한참 걸리거나 못 푸는 것 같다.
그래서 많이 풀어보는 게 중요하다는 생각이 든다.
풀이를 계속 생각해봤지만, 계속 아니더라..
결국 구글링을 참고해서 풀었다.
def solution(number, k):
answer = ''
stack = []
for num in number:
while k > 0 and stack and stack[-1] < num:
stack.pop()
k -= 1
stack.append(num)
if k > 0:
stack = stack[:-k]
return ''.join(stack)
스택을 사용해서 푼다.
number를 앞에서부터 확인해서
만약 k > 0이고, stack에 원소가 들어있고, 스택의 최상단 원소가 현재 확인하는 num보다 작다면
stack에 있는 원소를 pop하고 k -= 1을 해준다.
위 과정을 모든 num에 대해 수행했을 때, 만약 k가 아직 남아있다면 뒤에서부터 k개의 숫자를 빼준다.
예를 들면 number가 "4321"이고 k가 2인 경우 반복문을 한번 다 돌아도 "4321" 그대로이므로 뒤에서 숫자 2개를 빼주면 "43"이 나온다.
꼭 다시 풀어봐야할 문제
728x90