코딩테스트 대비/백준 알고리즘
BOJ - 1427 소트인사이드
JellyApple
2024. 5. 26. 15:11
문제 : 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