오늘 뭐했냐/기억하면 좋을 문제들

2주차 숙제

스스로에게 2023. 5. 25. 22:56

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

 

처음엔 머리가 멍해졌다 n번째 요소만 뽑아서 정렬하는 것까지는 할 수 있겠는데 strings 배열 자체를 어떻게 바꾸지 하는 생각이었다 

 

일단은 힌트를 봤다


  1. 기본적으로 사전식 정렬입니다. 문자열 배열같은 경우 sort로 정렬이 가능합니다.
  2. 그런데 인덱스에 해당하는 문자 순서로 정렬하고, 그 인덱스에 해당하는 문자가 같은 경우 사전식으로 정렬해주는 작업이 필요합니다.
  3. 물론 성능적인 측면에서 더 좋은 방법이 있지만, 지금은 가장 쉬운 방법을 채택하려고 합니다.

정리하면


  1. 문자열 앞에 인덱스에 해당하는 문자를 붙인다
    ["sun", "bed", "car"], 1 이라면 → ["usun", "ebed", "acar"]

  2. 사전순으로 정렬한다 (sort활용)
    ["acar", "ebed", "usun"]

  3. 정렬된 배열의 가장 앞 글자를 땐다
    ["car", "bed", "sun"]

이런  말이다

 

function solution(strings, n) {
    let answer = new Array(strings.length);
    for(let i = 0; i<strings.length;i++ ){
        strings[i] = strings[i][n]+strings[i]
    }
    strings.sort()
    for(let i = 0; i<strings.length;i++){
        answer[i]=strings[i].slice(1,strings[i].length)
        // strings[j].replace(strings[i][0],"");
    }
    return answer
}

결국 만들긴 했다. MDN과 공부한 내용 뒤져가면서 찾아보니 만들어지긴 했다. 

만들고 나면 별 내용이 없는데 문제는 3번 가장 앞 글자 제거에서 한참을 고민했다 무슨 메소드를 어떻게 사용해야 하는가에 대한 부분이다 

 

나는 slice 메소드를 사용했는데 정답에선 replace 메소드를 사용해서 처리하였다 

 

코딩은 암기가 아니라고 하는데 정확한 명칭이나 사용법까지 달달 외울 순 없어도 어떤 기능을 하는 메소드가 있다는 알아야 검색이라도 할 것 같다 

 

하다못해 MDN이라도 잘 뒤질 줄 알아야지