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 |
Tags
- 3진수
- useRef()
- Math.floor()
- isNaN()
- 소수점 올림내림
- parseInt()
- useEffect()
- substring()
- indexOf()
- includes()
- Eventlitener
- filter()
- repeat()
- getday()
- Math.sqrt()
- 차집합
- toUpperCase()
- new Date()
- Number()
- sort()
- jsx반복문
- 항해99솔직후기 #항해99장점 #항해99단점 #부트캠프추천
- slice()
- map()
- setDate
- 교집합
- reat if문
- React
- useState()
- charAt()
Archives
- Today
- Total
개발자로 전향중
[프로그래머스] 정수 내림차순으로 배치하기 - 배열(지수정렬) 본문
문제 설명
문제 풀이
function solution(n) {
// n을 문자열로 변환하여 각 자릿수를 배열로 만들기
const digits = n.toString().split('');
// 각 자릿수를 카운트하기 위한 배열 (0~9)
const count = new Array(10).fill(0);
// 각 자릿수의 개수 세기
for (let digit of digits) {
count[Number(digit)]++;
}
// 결과를 저장할 배열
let answer = '';
// 큰 수부터 작은 수로 구성
for (let i = 9; i >= 0; i--) {
while (count[i] > 0) {
answer += i; // i를 answer에 추가
count[i]--; // 카운트 감소
}
}
return parseInt(answer); // 문자열을 정수로 변환하여 반환
}
비교
function solution(n) {
// n을 문자열로 변환하여 각 자릿수를 배열로 만들기
const digits = n.toString().split('');
// 배열을 내림차순으로 정렬
digits.sort((a, b) => b - a);
// 정렬된 배열을 다시 문자열로 결합하여 정수로 변환
return parseInt(digits.join(''));
}
두 코드 비교
- 카운팅 배열을 사용하는 코드:
- 장점:
- 시간 복잡도가 O(n)입니다. 각 자릿수를 카운트하고, 그 카운트를 기반으로 결과를 만드는 것이므로, 입력 숫자의 길이에 비례하여 효율적입니다.
- 공간 복잡도가 O(1)입니다. 고정된 크기(0-9)의 배열을 사용하기 때문입니다.
- 단점:
- 코드가 조금 더 길고 복잡할 수 있습니다.
- 장점:
- sort() 메서드를 사용하는 코드:
- 장점:
- 코드가 간결하고 이해하기 쉽습니다. 자바스크립트의 내장 메서드를 활용하기 때문에 코드가 더 직관적입니다.
- 단점:
- 평균적으로 O(n log n)의 시간 복잡도를 가집니다. 정렬 과정에서 사용되는 비교 작업이 많기 때문입니다.
- 공간 복잡도가 O(n)입니다. 배열을 생성하고 정렬하는 과정에서 추가적인 메모리를 사용합니다.
- 장점:
결론
- 성능 측면: 입력의 크기가 크고 자릿수 범위가 한정되어 있는 경우(0-9), 카운팅 배열을 사용하는 방법이 더 효율적입니다. 이 경우 O(n)의 시간 복잡도를 가지므로, 처리 속도가 빠릅니다.
- 코드의 간결성: 코드가 간결하고 빠른 프로토타입을 원한다면 sort() 메서드를 사용하는 방법이 더 좋습니다. 다만, 입력 크기가 커지면 성능 저하를 경험할 수 있습니다.
'자료구조&알고리즘' 카테고리의 다른 글
[프로그래머스] 정수 제곱근 판별 - 이진탐색 (0) | 2024.09.26 |
---|---|
[프로그래머스] 문자열 내 p와 y의 개수 - 배열(빈도수 세기) (0) | 2024.09.24 |
[프로그래머스] 자릿수 더하기 - 배열 (0) | 2024.09.24 |
[알고리즘] Sorting 알고리즘 (선택, 버블, 삽입, 합병, 퀵 소트, 힙 소트 비교) (0) | 2022.08.31 |
[알고리즘] 브루트 포스 (0) | 2022.08.31 |