[CS & Algorithm] 정렬 문제 풀이 (1)

werthers·2023년 5월 30일
0

CS&Algorithm

목록 보기
8/12
post-thumbnail

세수정렬

https://www.acmicpc.net/problem/2752

세 개의 숫자를 입력 받고 오름차순으로 정렬하여 출력하는 문제이다.

간단하게 입력 모듈을 설정하고 공백을 기준으로 배열 형태로 만든 뒤, sort 함수를 통해 정렬 후 출력해주면 된다.

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

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

arr.sort((a, b) => Number(a) - Number(b));

console.log(`${arr[0]} ${arr[1]} ${arr[2]}`) //세수정렬

수 정렬하기 4

https://www.acmicpc.net/problem/11931

위 문제와 비슷하지만 입력 형태와 출력 형태가 다르기 때문에 편하게 sort 함수를 통해 정렬하여 형식에 맞게 출력하였다.

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

let n = parseInt(input2[0]);

let arr3 = [];
for(let i = 1; i <= n; i++)
  arr3.push(parseInt(input2[i]));
arr3.sort((a, b) => Number(b) - Number(a));
console.log(arr3.join('\n')); // 수 정렬하기 4

K번째 수

https://www.acmicpc.net/problem/11931

입력으로 주어진 숫자 배열에 대한 정렬을 진행하고 K로 주어진 인덱스를 출력하면 되는 문제다.

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

let [n, k] = input2[0].split(' ').map(Number);

let arr = input2[1].split(' ').map(Number);

arr.sort((a, b) => Number(a) - Number(b));
console.log(arr[k - 1]); // k번째 수

좌표 정렬하기

https://www.acmicpc.net/problem/11650

sort 함수의 매개변수인 콜백함수를 만들면 간단하게 풀 수 있는 문제이다.

입력 모듈과 input 함수를 적절히 분리하여 정렬할 데이터와 아닌 것을 분리하고, 조건에 맞게 정렬하는 함수를 작성하여 콜백하고 출력 조건에 맞게 출력한다.

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
let N = Number(input[0]);

function sorted(a, b)
{
  let [a1, a2] = a.split(' ').map(Number);
  let [b1, b2] = b.split(' ').map(Number);

  let c1 = a1 - b1;
  if (c1 != 0)
      return c1;
  let c2 = a2 - b2;
  return c2;
}

let arr = [];
for (let i = 1; i <= N; i++)
{
  arr.push(input[i]);
}
arr.sort(sorted);
console.log(arr.join('\n'));

좌표 정렬하기 2

https://www.acmicpc.net/problem/11651

위 문제와 유사하지만 콜백 함수의 정렬 조건의 우선 순위를 x에서 y 변경하고 정렬해주면 된다.

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
let N = Number(input[0]);

function sorted(a, b)
{
  let [a1, a2] = a.split(' ').map(Number);
  let [b1, b2] = b.split(' ').map(Number);

  let c2 = a2 - b2;
  if (c2 != 0)
      return c2;
  let c1 = a1 - b1;
  return c1;
}

let arr = [];
for (let i = 1; i <= N; i++)
{
  arr.push(input[i]);
}
arr.sort(sorted);
console.log(arr.join('\n'));

단어 정렬

https://www.acmicpc.net/problem/1181

단어를 입력 받아서 배열로 push중복 제거한 후 길이 순으로 정렬, 길이가 같다면 사전 순으로 정렬하는 콜백 함수를 만들어 정렬해주면 된다.

여기서 가장 중요한 것은
set을 통해 중복을 제거하는 것인데 제거 후 정렬을 해야하기 때문에 배열로 다시 변환해야한다.

javascript에서는 편하게 arr = [...new Set(arr)] 한 문장으로 Set의 인스턴스에 arr의 요소를 넣어 중복을 제거한 후 다시 [...]를 통해 변환할 수 있었다.

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
let N = Number(input[0]);

function sorted(a, b)
{
  if (a.length != b.length)
    return a.length - b.length;
  if (a < b)
    return -1;
  if (a > b)
    return 1;
  return 0;
}

let arr = [];
for (let i = 1; i <= N; i++)
{
  arr.push(input[i]);
}
arr = [...new Set(arr)];
arr.sort(sorted);
console.log(arr.join('\n'));
profile
Hello World !

0개의 댓글

관련 채용 정보