[백준] 5648 역원소 정렬 JavaScript

·2024년 6월 15일

문제

모든 원소가 양의 정수인 집합이 있을 때, 원소를 거꾸로 뒤집고 그 원소를 오름차순으로 정렬하는 프로그램을 작성하세요.

단, 원소를 뒤집었을 때 0이 앞에 선행되는 경우는 0을 생략해야합니다.

입력

첫 번째로 입력되는 건 n (1 ≤ n ≤ 106)으로 사용자가 뒤이어 입력할 원소값을 결정합니다. 입력하는 줄에는 하나의 원소값 뿐만 아니라 여러 원소값도 들어갈 수 있습니다.

단, 입력하는 정수는 1012을 넘어선 안 됩니다.

출력

출력문은 위 문제 내용에 나와있는 정렬방법으로 정렬하여 아래 예제 출력을 참고하여 출력하세요.

예제 입력

10 5 2233
1601 90100 13009 802
50000000
301 7654321
210

예제 출력

5
5
12
103
109
208
1061
3322
90031
1234567

내가 했던 풀이 방법

  1. Array 빈배열을 선언해준다.
  2. getN을 false로 초기화해준다. getN은 n 값을 찾았는지를 의미하는 변수이다. 입력 중에는 빈줄이 포함될 수도 있다. 그러므로, i가 0일 때 항상 n을 포함하지 않을 수도 있다. 그러므로 getN을 이용해 n을 찾지 못한 경우를 변수로 저장하여 해결한다.
  3. 현재 input이 공백을 제거했을 때 ""와 같다면 해당 input은 무시한다.
  4. input이 빈 줄이 아니라면, 앞 뒤 공백을 제거하고 공백을 기준으로 분할해준다. 그렇게 만들어진 배열을 map을 이용하여, 해당 문자열을 배열로 만들어 reverse 해준 뒤, 다시 문자열로 변환한 값을 Number형으로 변환해준다.
  5. getN이 false라면 현재 input의 첫 번째 요소를 제거해준 다음 getN을 true로 바꿔준다.
  6. input 배열을 Array에 추가해준다. 이때 구조분해할당을 이용하여, 개별 값으로 push해준다.
  7. 모든 input에 대해 처리한 뒤, Array를 오름차순으로 정렬해준다.
  8. Array를 문자열로 출력한다.

코드

const fs = require('fs');
let input = fs.readFileSync(0, 'utf-8').toString().trim().split('\n');

let Array = [];

let getN = false;
for (let i = 0; i < input.length; i++) {
  if (input[i].trim() === '') continue;
  input[i] = input[i]
    .trim()
    .split(' ')
    .map((value, index) => {
      return Number(value.split('').reverse().join(''));
    });
  if (!getN) {
    input[i] = input[i].slice(1);
    getN = true;
  }
  Array.push(...input[i]);
}

Array.sort((a, b) => a - b);
console.log(Array.join('\n'));

회고

처음에 구현했을 때 25%에서 틀렸길래 질문게시판을 확인해보니 다음과 같은 그링 있었다.

입력에 빈 줄이 포함될 수 있다고 하니 문제가 급 어려워졌다. boolean 변수를 이용하는 방법을 떠올려서 해결하긴 했지만... 문제가 좀 억까..가 심하지 않나..

profile
Frontend🍓

0개의 댓글