문자열로 구성된 리스트 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 |