Poylib
기록형 프론트엔드
Poylib
전체 방문자
오늘
어제
  • 분류 전체보기 (91)
    • Programing (38)
      • Javascript (17)
      • Typescript (1)
      • React (9)
      • React-Native (6)
      • Git (4)
      • Next (1)
    • Study (36)
      • Algorithm (35)
      • Etc. (1)
    • Record (17)
      • Memoirs (12)
      • Group (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Error
  • 프로그래머스
  • react
  • 백준
  • 코딩테스트
  • 리액트
  • Object
  • vite
  • 코칭스터디
  • javascript
  • 기초
  • 자바스크립트
  • 회고
  • 알고리즘
  • react-native
  • ReactNative
  • Git
  • typescript

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Poylib

기록형 프론트엔드

<BEAKJOON / node.js> 1181 단어정렬
Study/Algorithm

<BEAKJOON / node.js> 1181 단어정렬

2022. 5. 29. 11:37
https://www.acmicpc.net/problem/1181


//test.txt
13
but
i
wont
hesitate
no
more
no
more
it
cannot
wait
im
yours

sol1

let [n,...input] = require('fs').readFileSync('test.txt').toString().trim().split('\n');
let arr = input.sort((a,b) => a.length-b.length || a.localeCompare(b)).filter((el,i) => input.indexOf(el) === i);
for(let i=0;i<arr.length;i++) {
  console.log(arr[i])
}
// i
// im
// it
// no
// but
// more
// wait
// wont
// yours
// cannot
// hesitate

sort()를 사용해서 정렬하는 건 어렵지 않았는데, 길이가 같으면 사전 순으로 다시 정렬을 해줘야 하는 게 어려웠다. 해서 찾아낸 방법이 localeCompare() 메서드를 사용하는 것이다. 처음 알게 된 메서드인데 지정된 문자열이 참조된 문자열보다 앞, 뒤, 동일한지 숫자로 반환해주기 때문에 sort() 메서드에서 사용하기 딱 좋았다.

let a = 'babc'
let b = 'abcd'
console.log(a.localeCompare(b)) // 1

let a = 'abc'
let b = 'abcd'
console.log(a.localeCompare(b)) // -1

let a = 'abc'
let b = 'abc'
console.log(a.localeCompare(b)) // 0

모질라에서도 sort()에서 localeCompare()를 사용한 예제를 볼 수 있다.

let items = ['réservé', 'Premier', 'Cliché', 'communiqué', 'café', 'Adieu'];
items.sort( (a, b) => a.localeCompare(b, 'fr', {ignorePunctuation: true}));
// ['Adieu', 'café', 'Cliché', 'communiqué', 'Premier', 'réservé']
출처 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare

 

sol2

let [n,...input] = require('fs').readFileSync('test.txt').toString().trim().split('\n');

input.sort((a,b) => a.length-b.length || a.localeCompare(b));
let set = new Set(input);
console.log(Array.from(set).join("\n"));

첫번째 풀이는 중복을 없애기 위해 filter() 메서드를 사용했지만 Set에 담아서 중복을 제거한 후 다시 배열에 담아 출력할 수도 있다.

저작자표시 비영리 변경금지 (새창열림)

'Study > Algorithm' 카테고리의 다른 글

[BEAKJOON / node.js] 2775 부녀회장이 될테야  (0) 2022.06.07
<programmers / JavaScript> 신고 결과 받기  (0) 2022.06.03
[BEAKJOON / node.js] 13305 주유소  (0) 2022.05.28
<BEAKJOON / node.js> 11399 ATM  (0) 2022.05.24
[BEAKJOON / node.js] 1931 회의실 배정  (0) 2022.05.24
    'Study/Algorithm' 카테고리의 다른 글
    • [BEAKJOON / node.js] 2775 부녀회장이 될테야
    • <programmers / JavaScript> 신고 결과 받기
    • [BEAKJOON / node.js] 13305 주유소
    • <BEAKJOON / node.js> 11399 ATM
    Poylib
    Poylib
    모시깽 기록

    티스토리툴바