본문 바로가기
코테연습

79. 문자열 내 마음대로 정렬하기 Javascript

by hxunz 2022. 7. 28.

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

 

프로그래머스

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

programmers.co.kr

 

1. 문제에 대한 이해

  • 우리가 풀어야 할 문제는 무엇인가?
     - 주어진 각 문자열의 인덱스 n 번째 글자를 기준으로 오름차순 정렬하라
  • 주어진 자료는 무엇인가?
     - strings = 문자열로 구성된 리스트
     - n = 정수
  • 조건은 무엇인가?
     -
    strings는 길이 1 이상, 50이하인 배열입니다.
     - strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
     - strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
     - 모든 strings의 원소의 길이는 n보다 큽니다.
     - 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

2. 계획

  • 이 문제를 푸는데 있어서 유용하게 쓸 수 있는 지식은 무엇인가?
     - sort
  1. sort를 사용해서 요소를 비교해가면서 오름차순 정렬 한다.
  2. 요소의 인덱스 n번째 수가 같다면, 요소 자체 크기를 비교하여 오름차순 정렬한다.
  3. 그렇지 않으면 요소의 인덱스 n번째 수의 크기를 비교하야 오름차순 정렬해준다.

 

3. 실행

  • 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (strings, n) => {
  const sortWords = strings.sort((a, b) => {
    return a[n] === b[n] ? (a < b ? -1 : 1) : (a[n] < b[n] ? -1 : 1);
  });
  return sortWords;
};

test('sortWords', () => {
  expect(solution(["sun", "bed", "car"], 1)).toEqual(["car", "bed", "sun"]);
  expect(solution(["abce", "abcd", "cdx"], 2)).toEqual(["abcd", "abce", "cdx"]);
});

 

 

처음에는 반복문을 사용해서 크기를 비교 하려고 했는데
mdn 문서에서 sort를 찾아보니 문서에 나와있는 예시를 이용해서 이 문제를 해결할 수 있을 것같은 생각이 들었다. 
그래서 적용을 해봤더니 풀렸고 
처음에는 if문을 사용해서 코드가 길었는데 
삼항 연산자를 이용하니 코드가 깔끔해졌다. 

다른 사람의 풀이를 보았는데 localeCompare 메서드를 사용했더라 처음보는거였는데 
localeCompare() 메서드는 참조 문자열이 정렬 순서에서 지정된 문자열의 앞이나 뒤에 오는지 또는 동일한지 여부를 나타내는 숫자를 반환합니다.
라고 mdn에 나와있었다. 
이런 방법도 있었구나,,

 

댓글