티스토리 뷰
문제는 이렇다.
k번 숫자를 제거할 수 있고, 제거했을때 가장 큰 수를 만드는것.
가장 큰 수니까 앞에서부터 제거했을때 가장 큰 수끼리만 조합되게 해야한다.
1, 9, 2, 4 를 예를들면 1 < 9 이므로 1을 제거하고 9가 그 자리를 차지한다. 9 > 2 이므로 2는 냅두고, 2 < 4 이므로 2가 제거되고 그 자리를 차지한다.
앞의 수 보다 큰 수가 나오면 제거하고 자리를 차지한다고 생각이 정리됐다.
일단 number의 0번째 인덱스를 large_num에 넣어서 비교를 시작한다 (이렇게 하는 이유는 비교문을 그냥 통째로 비교를 시작하면 0번째 인덱스가 비교할 대상이 없어서 list 범위 초과 오류가 떠버린다.) .
그리고 나머지를 for문으로 하나씩 비교한다.
이 비교문에는 조건이 3가지가 있다
첫 번째 조건은 large_num의 길이가 0 이상인경우다. 만약 첫 번째 비교에서 large_num의 마지막 원소가 삭제돼 비어있으면 다음 숫자가 비교할 대상이 없어져서 list 범위 오류가 난다.
두 번째 조건은 large_num의 마지막 원소가 비교대상인 num보다 작아야 한다. 그렇지 않다면 while문을 거치지 않고 그냥 large_num 리스트에 append되면 목표에 맞게 큰 수를 만들고 있는 것이다. 해당 조건이 large_num의 마지막 원소를 pop하는 가장 중요한 조건이라고 할 수 있다.
세 번째 조건은 k > 0 이다. 몇개의 수를 없앨건지 k가 정해주는데, 없앨 때마다 k -= 1 해주기 때문에 k가 0이되면 더이상 해당 while문은 돌아가지 않는다. 나머지 숫자들이 그저 large_num에 append되면서 for문이 종료되면 된다.
마지막 케이스가 실패가 떠서 많이 곤란했는데, for문을 다 돌고도 k가 남아있는 경우이다.
이 경우 그냥 large_num의 뒤에있는 숫자들을 k만큼 지우면 된다.
앞의 숫자들은 이미 앞선 for문에 의해 가장 큰 수들로 이루어져 있으므로 굳이 추가로 지우게 될 경우 뒷 숫자들을 지우면 상관없게된다.
'Python > python 코딩테스트' 카테고리의 다른 글
[Python]프로그래머스 코딩테스트 연습 구명보트 (0) | 2020.10.12 |
---|---|
[Python] 프로그래머스 코딩테스트 조이스틱 (1) | 2020.10.08 |
[Python]프로그래머스 코딩테스트 체육복 (0) | 2020.10.07 |
[Python]프로그래머스 코딩테스트 카펫 (0) | 2020.10.06 |
[Python] 프로그래머스 코딩테스트 소수찾기 (0) | 2020.10.02 |
- Total
- Today
- Yesterday
- windows10 chmod 400
- 프로그래머스 코딩테스트
- Vue.js 입문
- 데이터 사이언스 프로그래밍 파이썬
- Vue.js 책
- javascript 객체배열
- 배열 특정요소 제거
- Java수료
- 프로그래머스
- Vue.js강의
- vue.js 특징
- 윈도우 chmod
- 배열 특정객체 제거
- 입문
- JavaScript
- chmod 400
- 다리위를지나는트럭
- 부트스트랩 커스텀
- 코드잇 강의
- bootstrap5
- MySQL 문제
- vue.js 개념
- dict 연속성
- vue bootstrap scss
- 파이썬
- Python
- heap max
- Vue.js
- 코딩테스트
- Vue.js 프로젝트 투입 일주일 전
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |