내일배움캠프 6기 React TIL

songhsb·2023년 5월 25일
0

내일배움캠프

목록 보기
15/106

2023.05.25

자바스크립트 숙제

문제

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

풀이

힌트
1. 문자열 앞에 인덱스에 해당하는 문자를 붙인다.
a. ["sun", "bed", "car"], 1 이라면 → ["usun", "ebed", "acar"]
2. 사전순으로 정렬한다.
a. ["acar", "ebed", "usun"]
3. 정렬된 배열의 가장 앞 글자를 땐다.
a. ["car", "bed", "sun"]

  1. 문자열 앞에 인덱스에 해당하는 문자를 붙인다.
  for (let i = 0; i < strings.length; i++) {
    strings[i] = strings[i][n] + strings[i];
  }
  1. 사전순으로 정렬한다.
  strings.sort();
  1. 정렬된 배열의 가장 앞 글자를 땐다.

1번과 비슷한 방법으로 구현하려 했으나 실패!

  for (let j = 0; j < strings.length; j++) {
    strings[j] = strings[j] - strings[j][0];
  }

substr() 메소드로 잘라보니 성공!

  for (let j = 0; j < strings.length; j++) {
    strings[j] = strings[j].substr(1, strings.length + 1);
  }

전체코드

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].substr(1, strings.length + 1);
  }

  result = strings;

  return result;
}

let strings1 = ["sun", "bed", "car"];
let n1 = 1;

let strings2 = ["abce", "abcd", "cdx"];
let n2 = 2;

console.log(solution(strings1, n1));
console.log(solution(strings2, n2));

다른 풀이

	// 앞글자 제거 후 리턴
    for(let j = 0; j < strings.length; j ++) {
      strings[j] = strings[j].replace(strings[j][0],"");
      result.push(strings[j]);
    }

튜터님은 replace()메소드를 사용해 앞글자를 ""로 대체하는 방법을 썼다. 이런 방식도 있다.

replace(strings[j][0],"");
profile
개발공부!

0개의 댓글