우당탕탕 개발일기
[프로그래머스 / 자바스크립트] 문자열 내 마음대로 정렬하기 본문
어렵다 어려워,,
각 단어인 문자열(strings[i])의 n번째 자리 값을 도출해내고,
그 값의 오름차순으로 strings[i]들을 정렬.
n번째 자리가 동일할 경우 사전순으로 정렬. 이 때는 strings[i]의 0번째부터 비교하게끔.
.
.
(💥정답 아님)
function solution(strings, n) {
var answer = [];
for (var i=0; i<strings.length; i++){
var index = strings[i][n];
answer += index
}
return answer.split('').sort();
}
일단 실패가 뜨더라도 결괏값을 얻기 위해서 코드를 입력했다.
결과는,
각 단어의 n번째값을 알파벳 오름차순 정렬하여 도출만 했다 🙃
해결할 문제는 ✏️n번째 값을 뽑아내는게 아니라, 그 값을 기준으로 strings[i]들을 오름차순 정렬하기
일단 겹치는 문자의 사전순은 ASCII코드 순서로 정렬되는(1, 10, 11, 2, 3, 4) sort()의 특성을 이용해보기로!
단어의 오름차순 정렬도 해야하니, 좀 더 sort에 대해 알아보기로 했다.
sort의 기본형태는, arr.sort([compareFunction])
compareFunction이 제공되지 않으면 요소를 문자열로 변환하고 유니코드 포인트 순서로 문자열을 비교하여 정렬하고,
compareFunction이 제공되면 배열 요소는 compare 함수의 반환 값에 따라 정렬된다.
- compareFunction이 (a, b) < 0 인 경우 a , b 순으로 정렬
- compareFunction이 (a, b) > 0 인 경우 b , a 순으로 정렬
- compareFunction이 0을 반환하면 a, b를 변경x (그대로)
//오름차순//
arr.sort(function(a,b) {
return(a-b);
});
// 화살표 함수 적용하면 //
arr.sort(function(a,b) => a-b);
내림차순으로 하려면 a-b를 b-a로 수정해주면 가능!
.
.
.
💡 코드
function solution(strings, n) {
strings.sort(function(a,b){
if(a[n] === b[n]){
return (a > b) - (a < b);
}else{
return (a[n] > b[n]) - (a[n] < b[n]);
}
})
return strings;
}
sort 함수를 적용하는데, 그 안에 if문을 두어 인덱스 n번째가 동일한 경우와 그렇지 않은 경우를 나눠두었다.
n번째 글자가 동일하면 문자열 전체를 비교하여 (오름차순으로) 정렬하는 것이고,
그렇지 않은 경우에는 a의 n번째 자리들만 비교하여 오름차순으로 정렬.
그래서 숫자를 정렬하는 sort 함수를 작성한다할 때, 예를들어 [1, 2, 3, 4, 5]라는 배열이 있다고 할 때 정렬 시 모든 엘리먼트가 순서대로여서 변화가 없다고 가정하면 1, 2, 3, 4 라는 값이 차례로 a로 들어갈 것이고, 2, 3, 4, 5라는 값이 차례로 b로 들어갈 것입니다. 쌍으로 묶어서 보면 [2, 1], [3, 2], [4, 3], [5, 4]의 값이 차례로 a와 b에 들어갑니다.
📍문제 출처
: https://programmers.co.kr/learn/courses/30/lessons/12915
'What I Learned > Algorithm' 카테고리의 다른 글
[프로그래머스 / 자바스크립트] 폰켓몬 (0) | 2022.01.26 |
---|---|
[프로그래머스 / 자바스크립트] K번째수 (0) | 2022.01.25 |
[프로그래머스 / 자바스크립트] 같은 숫자는 싫어 (0) | 2022.01.24 |
[프로그래머스 / 자바스크립트] 콜라츠 추측 (0) | 2022.01.24 |
[프로그래머스/ 자바스크립트] 자연수 뒤집어 배열로 만들기 (0) | 2022.01.24 |