문제 설명
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
제한 조건- strings는 길이 1 이상, 50이하인 배열입니다.
- strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
- strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
- 모든 strings의 원소의 길이는 n보다 큽니다.
- 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
strings | n | return |
---|---|---|
["sun", "bed", "car"] | 1 | ["car", "bed", "sun"] |
["abce", "abcd", "cdx"] | 2 | ["abcd", "abce", "cdx"] |
입출력 예 설명
입출력 예 1
"sun", "bed", "car"의 1번째 인덱스 값은 각각 "u", "e", "a" 입니다. 이를 기준으로 strings를 정렬하면 ["car", "bed", "sun"] 입니다.
입출력 예 2
"abce"와 "abcd", "cdx"의 2번째 인덱스 값은 "c", "c", "x"입니다. 따라서 정렬 후에는 "cdx"가 가장 뒤에 위치합니다. "abce"와 "abcd"는 사전순으로 정렬하면 "abcd"가 우선하므로, 답은 ["abcd", "abce", "cdx"] 입니다.
내가 짠 코드
function solution(strings, n) {
var answer = [];
let nCharArr = [];
let indexArr = [];
//오름차순 정렬
strings.sort();
//n번째 글짜 배열에 담기
strings.map((val,i) => {
nCharArr.push( val.substring(n,(n+1)) + i);
})
//n번째 글짜 배열 정렬
nCharArr.sort();
//인덱스 먹이기
nCharArr.map((val,i) => {
indexArr.push( Number(val.substring(1)));
})
//인덱스 번호대로 결과값뽑기
indexArr.map((val,i) => {
answer.push(strings[val]);
})
return answer;
}
50점 짜리 for문 안에서 앞,뒤 비교하며 다시 담으면 될텐데 너무 계속 for문 지옥이다.
다른 사람의 코드를 살짝 베껴 봤다.
어떤 분 코드
function solution(strings, n) {
// strings 배열
// n 번째 문자열 비교
return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}
한줄?! 이게 무슨...
String.prototype.localeCompare() - JavaScript | MDN
The localeCompare() method returns a number indicating whether a reference string comes before, or after, or is the same as the given string in sort order.
developer.mozilla.org
sort()는 알겠는데 localeCompare()는 뭔지 몰라 공식문서를 뒤졌다.
통사론
localeCompare(compareString)
localeCompare(compareString, locales)
localeCompare(compareString, locales, options)
매개변수
비교할 대상 문자열 referenceStr입니다.
locales그리고options
이러한 인수는 함수의 동작을 사용자 지정하고 응용 프로그램이 형식 지정 규칙을 사용해야 하는 언어를 지정할 수 있도록 합니다. locales및 인수 를 무시하는 구현에서 options사용된 로케일과 반환된 문자열 형식은 전적으로 구현에 따라 다릅니다.
이러한 매개 변수 및 사용 방법에 대한 자세한 내용은 Intl.Collator() 생성자(en-US) 를 참조하세요.
Intl.Collator() constructor - JavaScript | MDN
The Intl.Collator() constructor creates Intl.Collator objects that enable language-sensitive string comparison.
developer.mozilla.org
반환 값
전에 발생 하면 음수 ; 다음에 발생 하면 양성 ; 그들이 동등한 경우. referenceStrcompareStringreferenceStrcompareString0
아오 이해가 안된다. 코드로 찍어보자...
console.log('a'.localeCompare('b'))
console.log('b'.localeCompare('a'))
console.log('a'.localeCompare('a'))
-1
1
0
매개변수가 비교대상이니까
매개변수보다 작으면 -1
크면 1
같으면 0을 리턴해준다.
후.. 멍청해서 찍어보니 바로 이해했다 ㅠ
아는게 힘이다... 오늘도 삽질max
'trouble shooting' 카테고리의 다른 글
알고리즘 연습문제21(소수 만들기) (0) | 2022.09.27 |
---|---|
알고리즘 연습문제20(문자열 내림차순으로 배치하기) (0) | 2022.09.26 |
알고리즘 연습문제18(모의고사) (1) | 2022.09.26 |
알고리즘 연습문제17(로또의 최고 순위와 최저 순위) (1) | 2022.09.26 |
알고리즘 연습문제16 (두 개 뽑아서 더하기) (0) | 2022.09.26 |