Día de Ruru
20230214 TIL 본문
코딩 테스트 풀이
문자열로 구성된 리스트 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