프로그래머스 문자열 내 마음대로 정렬하기
프로그래머스 문자열 내 마음대로 정렬하기 LV1
문제 링크: https://programmers.co.kr/learn/courses/30/lessons/12915
내 문제 풀이
function solution(strings, n) {
for(let i = 0; i < strings.length; i++) {
strings[i] = strings[i][n] + strings[i];
}
strings.sort();
for(let j = 0; j < strings.length; j++) {
strings[j] = strings[j].substring(1);
}
return strings;
}
문제 링크: https://programmers.co.kr/learn/courses/30/lessons/12915
function solution(strings, n) {
for(let i = 0; i < strings.length; i++) {
strings[i] = strings[i][n] + strings[i];
}
strings.sort();
for(let j = 0; j < strings.length; j++) {
strings[j] = strings[j].substring(1);
}
return strings;
}
각 문자열의 특정 인덱스를 기준으로 정렬을 해줘야 했기에 이렇게 썼다.
실행 시간
다른 사람의 문제 풀이 (1)
function solution(strings, n) {
return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}
일단 되게 짧다.
실행 시간
생각보다 실행 시간이 길다.
아마도 sort()
를 하면서 String.prototype.localeCompare()
를 같이 써서 그런 것 같다. 그래도 덕분에 localeCompare
사용법을 알아서 좋다.
다른 사람의 문제 풀이 (2)
function solution(strings, n) {
return strings.sort((a, b) => {
const chr1 = a.charAt(n);
const chr2 = b.charAt(n);
if (chr1 == chr2) {
return (a > b) - (a < b);
} else {
return (chr1 > chr2) - (chr1 < chr2);
}
})
}
Boolean
값을 빼서 1
혹은 -1
을 도출해 내는 것에서 좀 놀라웠다.
실행 시간
이 로직도 굉장히 빠른 것 같다. 하지만 내가 썼던 로직이 아주 미세하게 0.01~ 0.02ms정도 더 빠른 테스트케이스들이 있다(이게 무슨 의미가 있겠냐마는...)
배운 점
역시 다른 사람들의 풀이를 봐야된다는 생각을 하게 됐다. 실행시간을 떠나서, 일단은 많이 배우는 것 같다. Boolean
값끼리 연산으로 1, -1도출할 수 있는 것도 그렇고, localeCompare
의 사용법도 알게 되었다. 또, 많은 자바스크립트 내 메소드들이 있지만, 역시나 속도 자체에서는 기본 for loop를 여러번 나누어서 사용하는 것이 실행속도가 또 빨리 나오는 것을 봤다. 문제 해결을 위해서는 써야겠지만, 속도만을 놓고보면 자바스크립트 기본 메소드들을 많이 쓴다는 것이 꼭 능사가 아니라는 것을 알았다.
Author And Source
이 문제에 관하여(프로그래머스 문자열 내 마음대로 정렬하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@srparkgogo/프로그래머스-문자열-내-마음대로-정렬하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)