https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
문제
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
입력
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
출력
조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.
예제 입력1
13
but
i
wont
hesitate
no
more
no
more
it
cannot
wait
im
yours
예제 출력1
i
im
it
no
but
more
wait
wont
yours
cannot
hesitate
해결 방법
1. 단어의 개수 N을 빼준다.
2. sort 메서드로 a.length - b.length를 조건으로 단어의 길이를 기준으로 정렬한다.
만약 단어의 길이가 같은 경우 사전 순으로 정렬되도록 a-b에 대한 조건도 걸어준다.
3. new Set을 사용해서 중복을 제거하고 배열에 넣기 위해 확장 연산자인 ... 을 사용하여 배열에 전부 넣어준다.
4. 줄 바꿈을 포함하여 join 해서 출력한다.
전체 코드
const fs = require('fs');
const input = fs.readFileSync('dev/stdin').toString().trim().split("\n");
const N = input.shift();
input
.sort((a, b) => {
if(a.length - b.length > 0) return 1;
else if(a.length - b.length < 0) return -1;
else if(a > b) return 1;
else if(a < b) return -1;
});
const words = [...new Set(input)];
console.log(words.join("\n"));
다른 풀이
const fs = require('fs');
const input = fs.readFileSync('dev/stdin').toString().trim().split("\n");
const N = input.shift();
console.log(
[...new Set(input)]
.sort((a, b) => a.length - b.length || a.localeCompare(b))
.join("\n"));
먼저 중복을 제거하고 배열에 넣은 다음 localeCompare를 이용해서 정렬하는 코드를 간단하게 정리하는 방법이 있었다.
이 방법을 보고 localeCompare이라는 함수를 처음 알게 되었다
* localeCompare란?
:인수로 지정된 문자열이 정렬상 string 객체의 문자열 뒤에 있으면 -1, 그 반대의 경우는 1, 동등한 경우에는 0을 반환한다.
참고 사이트
https://rrecoder.tistory.com/m/126
[백준] node.js 정렬 / 1181 단어정렬
📌1181 단어 정렬 www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주
rrecoder.tistory.com
http://www.devdic.com/javascript/refer/native/method:1379/localeCompare()
localeCompare()::JavaScript 레퍼런스
인수로 지정된 문자열이 정렬상 string 객체의 문자열 뒤에 있으면 음수, 그 반대의 경우는 양수, 동등한 경우에는 0을 반환한다.
www.devdic.com
'알고리즘 > 백준' 카테고리의 다른 글
[JavaScript] 백준 정렬 좌표 정렬하기 2 #11651번 (0) | 2022.10.07 |
---|---|
[JavaScript] 백준 좌표 정렬하기 #11650번 (2) | 2022.09.29 |
[JavaScript] 백준 정렬 소트인사이드 #1427번 (0) | 2022.09.28 |
[JavaScript] 백준 정렬 통계학 #2108번 (0) | 2022.09.27 |
[JavaScript] 백준 정렬 커트라인 #25305번 (0) | 2022.09.26 |