[STUDY] 정렬 알고리즘 문제풀이 3 230829

SKY·2023년 8월 29일
0

JS Coding Test Study

목록 보기
5/20

~51일차~

1. 좌표 압축

제출 답안

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n')

let n = Number(input[0]);
let arr = [];
for (let i = 1; i <=n; i++) {
  arr.push(input[i]);
}

//중복된 원소 먼저 제거 -> 집합(set)으로 변환한 뒤 배열로 되돌리기
arr = [...new Set(arr)];

 arr.sort(function (a,b) {
   return a - b
 })
//정렬 후 인덱스 값 출력

let answer = "";
for (let x of arr) {
  answer += x[0] + " " + x[1] + " ";
}
console.log(anwser);
  • 오답 : 런타임 에러

정답 예시

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n')

let n = Number(input[0]);
let arr = input[1].split(' ').map(Number);

let uniqueArray = [...new Set(arr)]; //새로운 배열로 선언
uniqueArray.sort((a,b) => a-b); // 오름차순 정렬

let myMap = new Map(); // map() 사용
for (let i = 0; i < uniqueArray.length; i++) {
  myMap.set(uniqueArray[i], i); //set(key, value)
           //값, 순서
}

let answer = "";
for (let x of arr) answer += myMap.get(x) + " "; //get(key)
console.log(anwser);

2. 나이순 정렬

제출 답안

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n')

let n = Number(input[0]);
let data = [];
for for(let i = 1; i <=n, i++) {
   let [x, y] =  input[i].split(' ');  //배열로 넣어보려 시도
   data.push([x,y]);
}
function compare (a, b) {
  if (a[0] != b[0]) return a[0] - b[0];
  else return a,b;
  }

data.sort(compare);

let answer = "";
for (let i = 0; i < data.length; i++) {
  answer += data[i].join(" ") + "\n";
}
console.log(anwser);

-오답

정답 예시

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n')

let n = Number(input[0]);
let arr = [];
for for(let i = 1; i <=n, i++) {
  let age = Number(input[i].split(' ')[0]);
  let name = input[i].split(' ')[1];
  arr.push([age, name]);
}

arr.sort((a,b) => a[0] - b[0]); // Node.js 정렬은 기본적으로 stable

let answer = "";
for (let x of arr)
  answer += x[0] + " " + x[1] + "\n";
console.log(anwser);

3. 소트인사이드

제출 답안

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n')

let arr = input[0].split('').map(Number);

  arr.sort(function (a,b) {
    return b - a;
  });

let answer = "";
for (let i = 0; i < arr.length; i++) {
  answer += arr[i]
}
console.log(answer);
  • 정답 : 정답이긴 하나, 출현 빈도 계산은 하지 않음

정답 예시

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n')

let n = input[0];
// 0부터 9가지 각 숫자의 출현 빈도를 담을 배열 선언
let cnt = Array(10).fill(0); // 초기 빈도 값 0으로 초기화

for (let x of n) { // 한자리씩 숫자를 확인하며
  cnt[Number(x)]++;
}

let answer = "";
// 9부터 0까지 하나씩 숫자를 확인하며
for(let i = 9; i >=0; i --) {
  // 출현 빈도만큼 출력하기
  for (let j = 0, j < cnt[i]; j++)
    answer += i + "";
}
console.log(answer);

0개의 댓글