티스토리 뷰
https://programmers.co.kr/learn/courses/30/lessons/42883
코딩테스트 연습 - 큰 수 만들기
programmers.co.kr
어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.
예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.
풀이 방법 : 간단하게 앞에 있는 숫자(큰 자릿수)가 뒤에 있는 숫자(작은 자릿수)보다 작으면 앞에 있는 숫자를 지워주는 방식으로 풀었습니다. k개 만큼을 이러한 방식으로 지운 후 남은 number는 큰수가 앞, 작은수가 뒤로 정렬이 되어 있는 상태 이므로 뒤에서 부터 k개 만큼 줄인 후 return해 주면 됩니다.
# 나의 풀이
def solution(number, k):
answer = ''
stack = []
i = 0
while True:
if i == len(number):
break
if k == 0 or len(stack) == 0:
stack.append(number[i])
elif stack[-1] < number[i]:
stack.pop()
i -= 1
k -= 1
else:
stack.append(number[i])
i += 1
if k == 0:
print(1)
return "".join(stack)
# 정렬이 되어 있는것을 생각하지 못하고 작은 수 부터 차례로 지워줬습니다.
while True:
for i in range(0, 10):
for j in range(len(stack)):
if int(stack[j]) == i:
stack[j] = ""
k -= 1
if k == 0:
return "".join(stack)
# 좋은 풀이
def solution(number, k):
stack = [number[0]]
for num in number[1:]:
while len(stack) > 0 and stack[-1] < num and k > 0:
k -= 1
stack.pop()
stack.append(num)
if k != 0:
stack = stack[:-k]
return ''.join(stack)
비슷한 방식이지만 if, else문이 훨씬 적고 깔끔하게 풀이 되어 있다.
'ALGORITHM > Programmers' 카테고리의 다른 글
[프로그래머스] 신고 결과 받기.py (0) | 2022.01.23 |
---|---|
[프로그래머스] 정수 삼각형.py (0) | 2022.01.09 |
[프로그래머스] 프렌즈4블록.py (0) | 2021.11.15 |
[프로그래머스] N개의 최소공배수.go (0) | 2021.11.01 |
[프로그래머스] 게임 맵 최단거리.py (0) | 2021.06.06 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- django
- ManyToMany
- gunicorn
- Python
- 의대 신경학 강의
- go context
- go
- query
- 독후감
- 프로그래머스
- 문자열 뒤집기
- Two Scoops of Django
- stdout
- conTeXt
- 백준
- leetcode
- 소프트웨어 장인
- 방금그곡
- 파이썬
- 팰린드롬수
- taggit
- sql lite
- for-else
- dfs
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함