본문 바로가기

항해99_10기/[2주차] 알고리즘 문제풀이

[19번] [중급] 문자열 내 마음대로 정렬하기

문제

나의 답

[pseudo code]
1. loop를 돌며, 각 단어와 해당 단어의 n 값을 key-value로 temp 배열에 담아줌
2. sort()함수를 사용해 알파벳 순서대로 정렬하기

    - 만약, val 값이 같다면, str 값으로 비교해서 정렬

    - 기본 sort() 함수는 입력받은 문자열을 Unicode 값으로 변환해서 비교하므로, 완전히 알파벳 순이 아님 => 숫자를 비교할 때, 숫자 값을 unicode로 변환하기 때문에 숫자이 경우, 원하는 순서를 얻지 못함. 문자의 경우, 알파벳 순으로 나옴

If compareFn is not supplied, all non-undefined array elements are sorted by converting them to strings and comparing strings in UTF-16 code units order. For example, "banana" comes before "cherry". In a numeric sort, 9 comes before 80, but because numbers are converted to strings, "80" comes before "9" in the Unicode order. All undefined elements are sorted to the end of the array.
- MDN Array.prototype.sort()

 

function solution(strings, n) {
  const temp = [];
  let answer = [];
  for (let i = 0; i < strings.length; i++) {
    temp.push({ val: strings[i][n], str: strings[i] });
  }
  temp
    .sort((a, b) => {
      let valA = a.val.toLowerCase();
      let valB = b.val.toLowerCase();
      if (valA > valB) {
        return 1;
      } else if (valA < valB) {
        return -1;
      } else {
        let strA = a.str.toLowerCase();
        let strB = b.str.toLowerCase();
        if (strA > strB) {
          return 1;
        } else {
          return -1;
        }
      }
    })
    .map((e) => answer.push(e.str));

  return answer;
}

 

String.prototype.localeCompare()로 처리하는 것 해보기