티스토리 뷰

반응형
 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

const fs = require('fs');
// 1.
let [ first, ...rest] = fs.readFileSync('/dev/stdin').toString().trim().split('\n');

// 2.
rest.sort((a, b) => {
  if(a.length > b.length) {
    return 1;
  } else if(a.length < b.length) {
    return -1;
  } else {
    return 0;
  }
});

// 3.
const set = new Set(rest);
const arr = [...set];

// 4.
let result = [];
for(let i=1;i<=50;i++) {
  let sub = arr.filter( x => x.length === i ).sort();
  result.push(...sub);
}

// 5.
result.forEach(elem => { console.log(elem) });
  1. 입력값을 rest 배열로 저장
  2. rest 배열을 문자열 길이 기준으로 정렬
  3. 중복 값 제거를 위해 Set으로 변경한 후, 다시 배열 형태인 arr로 변경
    • Set을 그대로 둔 채 set.forEach((item) => { ... });를 활용할 수도 있겠지만, 이 방식이 더 보기 좋았음.
  4. 결과용 배열인 result를 생성 후 다음을 진행
    • for 반복문을 통해 글자 수가 1개인 것부터 50개인 것까지 순차적으로 체크
    • filter 메소드를 통해 arr의 요소 중 글자 수를 기준으로 걸러낸 새로운 배열을 만들어낸 후 문자열 기준 정렬(sort 메소드)
    • 위 과정에서 반환된 배열을 result에 push
  5. console.log를 통해 배열의 모든 요소를 출력

 

결과

22372 KB / 1548 ms

메모

  • 처음에는 arr 배열 안에서 글자 길이 별로 정렬하는 방법을 찾았으나 잘 되지 않았음.
  • 그러나 문자열의 최대 길이가 주어져 있으므로, 이를 활용한 for 반복문을 통해 정렬이 가능하다는 피드백을 받아 반영하였음.

피드백

  • 4.에서 필요 없는 분기를 돌지 않기 위한 break 삽입이 필요. 예를 들어, 가장 긴 문자열 길이를 우선 확인한 후 적용이 가능할 것!
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함