초보 개발자의 성장 일기

문자열 내 마음대로 정렬하기, n번째 문자로 정렬 본문

Development/Algorithm

문자열 내 마음대로 정렬하기, n번째 문자로 정렬

YUNA 2023. 11. 29. 09:20

문제 설명

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

 

나의 해결 방법

map함수로 n번째를 뽑아 정렬을 하면 된다고 생각했다. ⇒ 오류

word[n]은 문자열에서 인덱스 n에 해당하는 문자 하나를 의미하므로, sort를 사용할 수 없다.

function solution(strings, n) {
    return strings.map(word => word[n].sort(a, b) => a-b);
}

 

다른 해결 방법

function solution(strings, n) {
  return strings.sort((a, b) => { // sort를 사용하고,
    const charA = a[n]; // a와 b의 n번째 단어를 변수로 만든다.
    const charB = b[n];

    if (charA < charB) { // B가 클경우 -1을 반환하고 A가 클 경우 1을 반환한다.
      return -1;
    } else if (charA > charB) {
      return 1;
    } else { // 같을 경우 문자 전체를 비교해 정렬한다.
      return a.localeCompare(b);
    }
  });
}

 

sort()를 사용하고 안에 다양한 조건을 넣을 수 있다는건 생각도 못했다. n번째 문자를 변수로 각각 만들어 클경우, 작을 경우 각각 -1, 1로 정렬을 해주고 같은경우 두 개의 문자 자체를 비교할 수 있게 만들었다.

 

function solution(strings, n) {
    return strings.sort((s1, s2) =>
		s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}

sort(), localeCompare()를 사용하여 더 간편하게 만든 풀이이다. 먼저 sort()로 정렬 후 삼항연산자를 사용해서 n번째 값이 같으면 localeCompare를 써서 비교하고, 다를경우 n번째와 비교한다.

 

localeCompare()

참조 문자열이 정렬 순으로 지정된 문자열 앞 혹은 뒤에 오는지 또는 동일한 문자열인지 나타내는 수치를 반환한다.

referenceStr.localeCompare(compareString);
  • compareString 전에 referenceStr이 오면 음수
  • compareString 뒤에 referenceStr이 오면 양수
  • 동등한 경우 0 을 반환

문자 비교할 때 사용하면 좋을것 같다.

 

사용 예시

// "a"는 "c" 전에 위치하므로 음수 값을 반환
"a".localeCompare("c"); // -1

 

 

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

[node.js] 백준 1920번 수 찾기  (0) 2024.02.16
[node.js] 백준 9012번 괄호  (0) 2024.02.14
문자열 다루기 기본  (0) 2023.11.25
약수의 개수와 덧셈  (0) 2023.11.24
가까운 수, 배열에서 가장 가까운 수 찾기  (0) 2023.11.22