문제 : https://www.acmicpc.net/problem/1427
문제 등급 : 실버5
문제 풀이 : 총 두 가지 문제 풀이가 있다.
1) 문자열로 만들어서 하나씩 쪼갠 후 내림차순 정렬 후 다시 합쳐주는 방식이 있다.
ex) 92413 -> 9 , 2 ,4 , 1 , 3 을 sort()로 내림차순으로 만들어준 뒤 다시 합쳐주는 것
2) 10개의 숫자 digit이 존재하고 0~9까지 모든 숫자에 대하여 빈도수를 센다
ex) 999243 => 9 => 3번 , 2 => 1번 , 4 => 1번 , 3 => 1번
그 후 각 숫자를 내림차순으로 하나씩 확인 후 , 빈도 수만큼 출력해준다.
문제 코드
1) 번 풀이
const fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().split("\n");
let N = Number(input[0]);
function sort(number){
let answer = '';
answer = String(number).split('').sort((a,b)=> b-a).join(''); // 문자로 만들어서 쪼갠 후 내림차순 정렬 후 다시 합쳐주는 방식
return answer;
}
console.log(sort(N))
2)번 풀이
const fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().split("\n");
let n = input[0]; // 수 입력 받기
// 0~9까지 각 숫자(digit)의 출현 빈도를 담을 배열 선언
let cnt = Array(10).fill(0); // 초기 빈도 값은 0으로 초기화
for(let x of n){
cnt[Number(x)]++; // 한 자리씩 숫자를 확인하며
}
let answer = "";
for(let i =9 ; i>=0;i--){
// 출현 빈도만큼 출력하기
for(let j=0;j< cnt[i];j++) answer +=i + "";
}
console.log(answer);
시간복잡도 : O(NlogN) q
'코딩테스트 대비 > 백준 알고리즘' 카테고리의 다른 글
BOJ - 11047 동전 0 (0) | 2024.07.02 |
---|---|
[코딩테스트] 그리디 알고리즘 (0) | 2024.07.02 |
BOJ - 10814 나이순 정렬 (0) | 2024.05.25 |
BOJ - 18870 좌표 압축 (0) | 2024.05.25 |
BOJ - 1181 단어 정렬 (0) | 2024.05.23 |