JavaScript/2주차

7. 2주차 끝 숙제

tnals634 2023. 5. 24. 09:58

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"] 이고 n이 1이면 각 단어의 인덱스 1의 문자 "u" ,"e" , "a" 로 strings를 정렬합니다.

 

제한 조건

  • strings는 길이 1 이상, 50이하인 배열입니다.
  • strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
  • strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
  • 모든 strings의 원소의 길이는 n보다 큽니다.
  • 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

처음에는 아래와 같이 작성했는데, 첫 테스트인 sun, bed, car는 값이 똑같이 잘 나왔지만,

그 후 테스트인 abce, abcd, abx 는 값이 다르게 나왔습니다.

function Strings(strings, n){
    //배열 선언
    var answer = new Array(strings.length);
    //반복문
    for(let i = 0; i < strings.length; i++){
        //answer배열에 받은 인덱스 자리의 문자를 잘라서 넣어준다.
        answer[i] = strings[i].substr(n,1);
        console.log(answer[i]);
    }
    var temp = "";
    for(let i = 0; i < strings.length - 1; i++){
        for(let j = i + 1; j < strings.length; j++){ 
            //이중반복문으로 전의 answer과 후의 answer를 비교한다.           
            if(answer[i] > answer[j]){
                //후의 값이 더 크면 strings의 전의 값과 후의 값의 자리를
                // 바꿔준다.
                temp = strings[i];
                strings[i] = strings[j];
                strings[j] = temp;
            }
        }
    }
    return strings;
}

그래서 좀 더 고민해본 결과 조건을 더 달아서 아래와 같이 작성하게 됐습니다.

function Strings(strings, n){
    //배열 선언
    var answer = new Array(strings.length);
    //반복문
    for(let i = 0; i < strings.length; i++){
        //answer배열에 받은 인덱스 자리의 문자를 잘라서 넣어준다.
        answer[i] = strings[i].substr(n,1);
        console.log(answer[i]);
    }
    var temp = "";
    for(let i = 0; i < strings.length - 1; i++){
        for(let j = i + 1; j < strings.length; j++){ 
            //이중반복문으로 전의 answer과 후의 answer를 비교한다.           
            if(answer[i] > answer[j]){
                //후의 값이 더 크면 strings의 전의 값과 후의 값의 자리를
                // 바꿔준다.
                temp = strings[i];
                strings[i] = strings[j];
                strings[j] = temp;
            }
            //만약 뽑은 문자가 같은 거라면
            if(answer[i] === answer[j]){
                //두개의 문자열을 따로 비교해본다.
                var string1 = new Array(strings[i].length);
                var string2 = new Array(strings[j].length);
                var count = 0;
                for(let z = 0; z < strings[i].length; z++){
                    //각각 문자를 잘라서 넣어준 후
                    string1[z] = strings[i].substr(z,1);
                    string2[z] = strings[j].substr(z,1);
                    //비교해서 조건이 맞으면 count를 올려준다.
                    if(string1[z] > string2[z]){
                        count++;
                    }
                }
                //만약 count값이 0이 아니면 서로 바꿔준다.
                if(count !== 0) {
                    temp = strings[i];
                    strings[i] = strings[j];
                    strings[j] = temp;
                }
            }
        }
    }
    return strings;
}

이렇게 제출했습니다.

 

그리고나서 강사님 코드를 확인하고 많이 놀랐습니다.

아래는 강사님 코드입니다.

function solution(strings, n) {
    let result = [];

		// 문자열 가장앞 글자 붙인 문자 배열 만들기
    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].replace(strings[j][0],"");
      result.push(strings[j]);
    }

    return result;
}

sort()함수가 python에서만 되는 줄 알았는데, js를 c와 같이 생각해서 미쳐 생각하지 못했습니다.

이런 식으로 짧게 작성할 수 있다는 것을 알았습니다.

'JavaScript > 2주차' 카테고리의 다른 글

6. Set 소개 및 예시코드 연습  (0) 2023.05.23
5. Map 소개 및 예시코드 연습  (0) 2023.05.23
4. 일급 객체로서의 함수 2  (0) 2023.05.23
3. 일급 객체로서의 함수 1  (0) 2023.05.23
2. ES6 문법 소개 및 실습 2  (0) 2023.05.23