반응형
Notice
Recent Posts
Archives
Today
Total
Link
관리 메뉴

꾸준하게

[JS코테] 문자열 내 마음대로 정렬하기 - 다른풀이공부하기 본문

JS코딩테스트

[JS코테] 문자열 내 마음대로 정렬하기 - 다른풀이공부하기

DaeunCoding 2023. 5. 26. 16:38
728x90
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/12915

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
(인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.)

 

[나의풀이]

function solution(strings, n) {
    const order = strings.map(x => x[n]).sort();
    let arr = strings.sort();
    let answer = [];
    for(i=0;i<strings.length;i++){
        for(j=0;j<strings.length;j++){
            if(arr[j][n] === order[i]){
                answer.push(arr[j]);  
                arr.splice(j,1,0);
                break;
            }
        }
    }
    return answer;
}

 

[풀이방법]

function solution(strings, n) {
    // 1) 배열strings의 요소 중 n번째 글자만을 모아서 오름차순 배열한 배열order 선언
    const order = strings.map(x => x[n]).sort();
    // 2) 배열strings를 오름차순 배열한 배열arr 선언
    let arr = strings.sort();
    // 3) 빈 배열answer 선언
    let answer = [];
    // 4) i=0부터 strings의 길이만큼 반복 ( 배열 order index 0부터 끝까지 )
    for(i=0;i<strings.length;i++){
        // 5) j=0부터 strings의 길이만큼 반복 ( 배열 arr index 0부터 끝까지 )
        for(j=0;j<strings.length;j++){
            // 6) arr의 j번째 index의 n번째 글자가 order의 i번째 index와 같을 때
            if(arr[j][n] === order[i]){
            	// 7) 배열 answer의 맨 뒤에 arr[j]를 추가
                answer.push(arr[j]);  
                // 8) 배열arr의 j번째 index를 0으로 변경 (index변경 없이 내용 지우기 위함)
                arr.splice(j,1,0);
                // 9) j관련 for문 끝냄
                break;
            }
        }
    }
    return answer;
}

 

[다른풀이]

function solution(strings, n) {
    return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}

 

[풀이방법 - 모르겠다.... 나중에 다시 공부해보자.]

 

728x90
반응형