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 | 29 | 30 | 31 |
Tags
- 카카오페이
- OpenCV
- sw
- 백준
- 결제
- SQL
- Ai
- Node
- it #응집도 #결합도 #소프트웨어
- 정렬
- 오블완
- 간편결제
- 결제취소
- openai
- supabase
- 코딩테스트
- 릿코드
- 프로그래머스
- 코딩
- 데이터베이스 #백엔드 #데이터
- 포트원
- 토스페이
- 깃허브
- certbot
- clova
- OCR
- 웹훅
- 네이버
- ETF
- 티스토리챌린지
Archives
- Today
- Total
싱싱미역상태
프로그래머스-가장 큰 수 본문
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42746#
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
나의 시도(해결 X)
문제를 보자마자 코드를 만들어 봤는데, 시간초과가 발생했다. 아마도 이중for문 때문에 그런 것 같다.
# 가장 큰 수 구하기
# [6, 10, 2] -> [6102, 6210, 1062, 1026, 2610, 2106] -> 3!개수 -> 6102 (가장 큼)
# 1 <= len(numbers) <= 10만
# 0 <= 원소 <= 1000
# [3, 30, 34, 5, 9] -> 5! -> 120개
from itertools import permutations
def solution(numbers):
answer = []
for arr in permutations(numbers, len(numbers)):
temp = ''
for i in range(len(arr)):
temp += str(arr[i])
answer.append(int(temp))
return str(max(answer))
다른 풀이
이 문제에서의 핵심이 되는 부분은 문자열을 정렬할 때, 사전 순으로 정렬을 하는 것이 핵심이다. 다른 방법도 계속 생각해봤지만, 이 개념을 알고 있었다면 빠르게 풀었을 것 같다.
- 문자열을 정렬할 때 사전순이기 때문에 '1' < '10' < '5' < '6' 이렇게 된다.
- 따라서 아래 코드에서 *3을 한 이유 또한 앞자리수 중복을 막고 완전 구분되게 만들기 위함
# 가장 큰 수 구하기
# [6, 10, 2] -> [6102, 6210, 1062, 1026, 2610, 2106] -> 3!개수 -> 6102 (가장 큼)
# 1 <= len(numbers) <= 10만
# 0 <= 원소 <= 1000
# [3, 30, 34, 5, 9] -> 5! -> 120개
def solution(numbers):
zeroCount = 0
for n in numbers:
if n == 0:
zeroCount += 1
if zeroCount == len(numbers):
return "0"
temp = list(map(str, numbers))
temp.sort(key = lambda x: x * 3)
answer = ''
for i in range(len(temp) - 1, -1, -1):
answer += temp[i]
return answer
'SW' 카테고리의 다른 글
프로그래머스SQL- 흉부외과 또는 일반외과 의사 목록 출력하기 (0) | 2024.11.30 |
---|---|
프로그래머스SQL-경기도에 위치한 식품창고 출력하기 (0) | 2024.11.30 |
프로그래머스-K번째 수 (0) | 2024.11.29 |
프로그래머스SQL-조건에 부합하는 중고거래 댓글 조회하기 (1) | 2024.11.29 |
프로그래머스-과일로 만든 아이스크림 고르기 (0) | 2024.11.28 |