프로그래머스
{"sun":"u", "bed":"e", "car":"a"}
로 저장하는 객체를 만든다["u", "e", "a"]
로 저장하는 배열을 만들고 오름차순 정렬한다function solution(strings, n) {
strings.sort(); //먼저 문자열 배열을 정렬시킨다
const obj = {}; //문자열과 알파벳 저장하는 객체
const arr = []; //알파벳 저장하는 배열
const result = [];
for(let i=0;i<strings.length;i++){
obj[strings[i]] = strings[i][n];
arr.push(strings[i][n]);
}
arr.sort();
for(let i=0;i<arr.length;i++){
for(const el in obj){
if(arr[i]===obj[el]){
result.push(el);
delete obj[el];
}
}
}
return result;
}
s1.localeCompare(s2); //s1이 s2보다 정렬상 전에 온다면 음수, 후에 온다면 양수, 같다면 0
s1[n].localeCompare(s2[n]); //위와 같은 방법으로 s1의 n번째 인덱스값과 2의 n번째 인덱스 값을 비교한다.
function solution(strings, n){
return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}
function solution(strings, n){
var answer = [];
for(let i=0; i<strings.length; i++){
const letter = strings[i][n]; //n번째 글자
strings[i] = letter + strings[i]; //n번째 글자를 strings[i] 앞에 붙여준다
}
strings.sort(); // 요소가 변경된 strings 배열 정렬 ===> 같은 문자로 시작하더라도 그 다음 글자로 비교해서 오름차순으로 정렬됨.
for(let i=0; i<strings.length; i++){
strings[i] = strings[i].replace(strings[i][0],""); // 앞에 추가된 문자 배열에 넣어주기
answers.push(strings[i])
}
return answer;
}
a[n]
과 b[n]
을 직접 비교한다function solution(strings, n){
var answer = [];
strings.sort((a,b) => {
if(a[n]>b[n]) return 1
if(a[n]<b[n]) return -1
if(a[n]===b[n]){
if(a>b) return 1;
if(a<b) return -1;
return 0
}
})
return strings;
}
String.prototype.localeCompare()
referenceStr.localeCompare(compareString[, locales[, options]])
기존 문자열과 비교했을때 비교 대상 문자열이 정렬상 전에 오면 음수를, 이후에 오면 양수를, 혹은 같은 순서라면 0을 리턴한다
- 단, 브라우저와 브라우저 버전에에 따라 리턴값이 -1, 1이 아닐 수도 있으므로 (-2, 2 등) 음수, 양수, 0으로 구분하는 것이 적절하다
String.prototype.replace()
var newStr = str.replace(regexp|substr, newSubstr|function)
- 교체된 새로운 문자열을 리턴시킨다
프로그래머스의 문제들을 풀면서 고차함수를 잘 활용할 수 있어야 한다는 것이다. 나는 객체와 배열을 만들고 이중반복문을 돌리면서 문제를 해결했는데, 첫번째 풀이를 보니 sort
와 localeCompare
함수를 적절히 사용해서 간단히 해결했다. localeCompare
함수는 이 문제를 통해 처음 알게 되었다. sort
가 양수, 음수, 0으로 정렬시키므로 localeCompare
함수를 적절히 사용할 수 있었다.
sort는 첫번째 문자열이 일치할때 두번째 문자열로 크기를 비교하므로 n번째 인덱스 값을 앞에 붙여주면 처음에는 그 값으로 크기를 비교하고, 일치한다면 원래 첫번째 글자로 비교한다.
가장 직관적으로 쉽게 푼 방법같다. a[n]===b[n]
인 경우 세가지 경우로 구분해 a와 b 크기를 비교할 수 있다.