문제 설명
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
시도
문자열에도 idex번호가 있기 때문에 string[i][n]으로 비교해야하는 문자를 추출할 수 있었다.
for (let i = 0; i < str.length; i++) {
if (str[i][n] > str[i++][n]) {
arr.unshift(str[i]);
}
else if(str[i][n] === str[i++][n]){
if (str[i] > str[i++]) {
arr.unshift(str[i])
}
else {
arr.unshift(str[i++])
}
}
}
console.log(arr)
문자를 비교해서 크다면 배열에 넣고 아니라면 else로 그 반대 문자를 넣는 방식으로 짰다.
회고한 끝에 이 코드로는 원하는 결과를 얻을 수 없다는 점을 알았다.
하지만 정말 답답했던 점은 어째서 console.log의 결과가 undifined라는 것 이다.
그래서 손수 하나씩 console.log를 찍어봤고 i가 2 인 순간에 i++에 해당하는 값이 undifined라는 것을 알았다.
의문인 점은 i가 0, 1 일 때는 값이 있을텐데..어째서 아무 값도 안 들어가고 undifined만 나오는 점이다.
고민을 거듭하던 와중 어차피 접근법 자체가 잘 못된 코드, 과감하게 지워버리고 확실한 부분부터 다시 생각했다.
현재로서 확실히 알고 있는 것은 str의 요소에서 비교해야하는 값을 추출할 수 있는 것, 그곳부터 시작했다.
해결
for(let i=0; i<str.length; i++){
str[i]=str[i][n]+str[i]
}
str.sort()
문자열 또한 크기 비교가 가능하다. a b c d 사전 순서대로 번호가 커지는 개념이다. 그리고 대문자는 무조건 소문자 보다 작다. Z가 a보다 작다. 그리고 크기 비교는 맨 앞자리 문자를 기준으로 한다. 즉 "azzzz" 보다 "b"가 크다는 뜻이다.
그래서 비교해야하는 문자를 맨 앞에다가 두는 코드를 짜고 .sort()로 오름차순 정렬을 한다. sort()는 조건이 없다면 오름차순으로 배열을 정리한다.
for(let i=0; i<str.length; i++){
str[i]=str[i].slice(1,str[i].lengtn)
}
그리고 마지막으로 str에 붙어있는 맨 앞글자를 제거해야 한다. 이것은 slice매서드로 맨 앞부분을 제거하고 문자열의 전부를 나타나게 한다.
알게된 점
반복문 내부에 i++를 넣으면 마지막에는 undefined가 나온다.
sort()는 조건이 없다면 오름차순으로 정렬시킨다.문자열의 크기비교는 가능하다.
모든 영어 소문자는 모든 영어 대문자 보다 크다.
'T.I.L' 카테고리의 다른 글
23-05-29 T.I.L 바닐라 자바스크립트 append() 2 (0) | 2023.05.29 |
---|---|
23-05-28 T.I.L 바닐라 자바스크립트 append() (0) | 2023.05.28 |
23-05-25 T.I.L 비동기 작업의 동기적 표현 Promise + Async/await 로직 해석(콜백함수) (0) | 2023.05.25 |
23-05-24 T.I.L 깊은 복사 알고리즘 (1) | 2023.05.25 |
23-05-23 T.I.L 문자열 내 개수 비교 (programmers) (0) | 2023.05.23 |