Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Brigthics Studio
- 영상제작기
- 브라이틱스 서포터즈
- 직원 이직률
- 개인 의료비 예측
- 노코드AI
- 삼성 SDS
- 직원 이직여부
- 삼성SDS Brightics
- 데이터 분석
- Brigthics를 이용한 분석
- 삼성 SDS Brigthics
- 삼성SDS
- 추천시스템
- Brightics Studio
- 브라이틱스
- 캐글
- 혼공머신러닝딥러닝
- 혼공머신
- 삼성SDS Brigthics
- 데이터분석
- 모델링
- Brightics를 이용한 분석
- 포스코 청년
- 포스코 아카데미
- 혼공
- Brigthics
- 팀 분석
- Brightics
- 혼공학습단
Archives
- Today
- Total
데이터사이언스 기록기📚
[프로그래머스] Level2_큰 수 만들기(Greedy) 본문
📌문제 유형
Greedy
📌문제
📌문제 풀이
1차 시도 (33.3 - 시간초과)
from itertools import combinations
def solution(number, k):
answer = ''
num = []
new_nums = []
# 값 하나씩 문자로 넣기
for i in range(len(number)):
num.append(number[i])
# n개의 숫자만 선택
n = len(number) - k
nums = tuple(combinations(num, n))
for i in range(len(nums)):
new_nums.append(int(''.join(nums[i])))
return str(max(new_nums))
2차 시도(첫 번째 시도 간단 ver)
from itertools import combinations
def solution(number, k):
answer = ''
n = len(number) - k
number = list(number)
nums = sorted(list(map(''.join,combinations(number, n))), reverse = True)
return nums[0]
3차 시도(예시만 통과)
def solution(number, k):
answer = ''
n = len(number)
len_n = len(number) - k
num = sorted(list(map(int,set(list(number)))), reverse = True)
# 전체 개수 중 큰 값 1/2개만 남겨두기
num = [num[i] for i in range(len(num)//2)]
# 원래 숫자들
number = list(map(int,number))
i = 0
for _ in range(n):
if number[i] not in num:
if len(number) > len_n:
number.pop(i)
else:
return ''.join(list(map(str,number)))
else:
i += 1
return ''.join(list(map(str,number)))
4차 시도(다른 사람의 풀이)
- 값은 새로운 리스트에 하나씩 넣기
- 새로운 리스트에 있는 값과 넣을 값을 비교(앞의 값만 비교)
def solution(number, k):
answer = []
return not answer
for i in number:
# answer에 값이 없으면, 하나만 넣기
if not answer:
answer.append(i)
continue
# answer 마지막 값이 현재 값(i)보다 작은 경우와 k 고려
while answer[-1] < i and k > 0:
answer.pop()
k -= 1
# answer가 없거나 k가 조건에서 어긋날 때 멈춤
if not answer or k <= 0:
break
answer.append(i)
if len(answer) == len(number) - k:
break
return ''.join(answer)
📌다른 사람들의 풀이
1) 조금 더 간단한 코드
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)
📌리뷰
- 새로운 리스트 만들고 하나씩 넣어서, 다음 수와 비교하기
- 가장 정석적인 방법이 제일 효과적일 수도?!
728x90
'Coding Test > 프로그래머스(Python)' 카테고리의 다른 글
[프로그래머스] Level 2_숫자의 표현(연습문제) (0) | 2022.10.12 |
---|---|
[프로그래머스] Level 2_멀리뛰기(연습문제) (1) | 2022.10.08 |
[프로그래머스] Level 2_예상 대진표(2017 팁스타운) (1) | 2022.10.08 |
[프로그래머스] Level 2_N개의 최소공배수(연습문제) (1) | 2022.10.08 |
[프로그래머스] Level 2_구명보트(Greedy) (0) | 2022.10.08 |
Comments