Notice
Recent Posts
Recent Comments
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Día de Ruru

20230214 TIL 본문

항해99/TIL

20230214 TIL

공대루루 2023. 2. 15. 01:27

코딩 테스트 풀이

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

 오~~ 어제 보다는 쉽네~ 라고 생각했지만 그것은 나의 오산..

문제 점

처음 문제를 봤을 때 가장 먼저 들었던 생각은 n에 들어오는 글자만 뽑아서 정렬을 한 다음 그 글자에 맞춰서 다시 정렬을 하면 되겠다!! 였다 

더보기
function compareNumeric(a, b) { //오른차순 정렬
    if(a.check < b.check){
        return -1
    } else if(a.check > b.check){
        return 1
    } else {
        return 0
    }
    }
function solution(strings, n) {
    var answer = [];
    for(let i in strings){
        let check = strings[i][n] //string의 n번째 글자를 뽑아서 check에 넣어라
        let Key = strings[i] 
        var checkList = {'origin':Key,'check':check};//두개를 키값을 각각 정해주고 하나의 배열에 넣어라
        answer [i] =checkList //answer에는 리스트안에 여러개의 객체가 들어가게됨  
    }
    answer.sort(compareNumeric) //check 값으로 정렬
    
    console.log(answer)
    for (let i in answer){ //정렬된 리스트에서 origin에 해당하는 값만 추출
        answer[i] = answer[i]['origin']
    }
    return answer;
}

해결 방안

내가 짠 코드로는 문자열끼리 비교해서 정렬은 할 수 있는데 문자를 하나 그냥 뽑아서 정렬하기 때문에 n번째 오는 문자가 같은 경우를 처리해줄 수 없었다..

그리고 그 문제를 해결해서 풀수 있는 방법을 강의시간에 배웠다

문자를 하나 그냥 뽑아서 쓰는 것 보다는 원래 있던 문자의 가장 앞부분에 붙여두면 가장 앞의 문자가 같은 글자여도 그 다음 글자로 판단을 할 수 있기 때문에 해결이 가능하다고 한다. 예를 들면 ['abcd','abet','cdd']의 경우 만약 두번째 값으로 비교를 하게 되면 배열안에 있는 값을 ['babcd','babet','dcdd']로 바꿔준 후 정렬하면 된다고 한다!!

let newStringbox = [];
for (str of strings){
    newStringbox.push(str[n]+str);
}

알게된 점

문자열을 변경시켜준 후 다시 원래의 문자로 바꿔주기 위해서 map()안에 replace()를 써서 다시 변경시켜줄 수 있었다.

    var answer = newStringbox.sort().map((wrd) => wrd.replace(wrd.at(0),''))

replace(치환 대상,치환 값) -> replace는 첫번째로 찾은 문자열만 치환해준다.

모든 문자열을 치환해주기 위해서는 문자열을 /로 감싸서 g(global)라는 modifier 를 붙여주면 된다고 한다.

 

'항해99 > TIL' 카테고리의 다른 글

20230217 TIL  (0) 2023.02.18
20230215 TIL  (0) 2023.02.16
20230213 TIL  (0) 2023.02.13
2023.02.10 TIL  (0) 2023.02.12
2023.02.09 TIL  (0) 2023.02.09
Comments