[Lv.1] 문자열 내 마음대로 정렬하기 (✩✩✩✩) - 질문

문제 : https://programmers.co.kr/learn/courses/30/lessons/12915
체감 난이도 : ✩✩✩✩

🔶 내가 한 방법

  1. 알파벳에 해당하는 숫자를 alpha객체에 정렬함
  2. strings의 n번째의 알파벳을 alpha객체의 키로 찾아 해당 값인 숫자를 찾는다.
  3. 변수 obj를 선언하고, { 3: ['abce', 'abcd'], 24: ['cdx'] }; 이런식으로 만든다.
  4. obj를 돌면서, result 배열에 obj의 값인 배열의 요소를 담음.
    배열에 요소가 2개 이상이면 문자순으로 정렬하여 담음.
  5. result를 리턴함.
function solution(strings, n) {
  const alpha = {a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9, j: 10, k: 11, l: 12, m: 13, n: 14, o: 15, p: 16, 
    q: 17, r: 18, s: 19, t: 20, u: 21, v: 22, w: 23, x: 24, y: 25, z: 26 };

  // 1. { 3: ['abce', 'abcd'], 24: ['cdx'] }; 이렇게 만들기
  const obj = {}; 
  strings.forEach((el) => {
    const number = alpha[el[n]];

    if (obj[number]) {
      obj[number] = [...obj[number], el];
      return;
    }
    obj[number] = [el];
  });

  // 2. 같은 순서 있으면 문자순으로 정렬하여 결과값 배열로 출력.
  const result = [];
  for (const [key, value] of Object.entries(obj)) {
    value.sort();
    result.push(...value);
  }

  return result;
}

console.log(solution(['sun', 'bed', 'car'], 1)); // ["car", "bed", "sun"]
console.log(solution(['abce', 'abcd', 'cdx'], 2)); // ["abcd", "abce", "cdx"]

🔶 다른 사람 방법

  • 방법1 - n번째 알파벳을 각 string의 젤 앞에 붙여 정렬함.
    (n번째 알파벳대로 정렬, n번째 알파벳이 같으면 뒤에 문자를 비교하여 한번에 정렬됨.)
function solution(strings, num) {
  const arr = strings.map((el) => el[num] + el); // ['cabce', 'cabcd', 'xcdx']
  arr.sort(); // ['cabcd', 'cabce', 'xcdx']
  return arr.map((el) => el.slice(1));
}
  • 방법2 - sort() 사용 ⬅ sort 사용방법 질문!!
function solution(strings, n) {
    var answer = [];
    strings.sort((a,b)=>{
        if(a[n]>b[n]){
            return 1
        } else if(b[n]>a[n]){
            return -1
        } else if(a[n]==b[n]){
            if(a>b){
                return 1
            } else if(a<b){
                return -1
            }   else{
                return 0
            }
        }
    })
    return strings
}

🔶 피드백

  1. sort메서드 사용방법 잘 모르겠음.(질문)

좋은 웹페이지 즐겨찾기