[알고리즘] 문자열 내 마음대로 정렬하기-JavaScript

강재영
4 min readMay 28, 2019

--

Algorithm Problem with JavaScript — 10day

Problem

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

제한사항

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

입출력 예

입출력 예 설명

입출력 예 1
sun, bed, car의 1번째 인덱스 값은 각각 u, e, a 입니다. 이를 기준으로 strings를 정렬하면 [car, bed, sun] 입니다.

입출력 예 2
abce와 abcd, cdx의 2번째 인덱스 값은 c, c, x입니다. 따라서 정렬 후에는 cdx가 가장 뒤에 위치합니다. abce와 abcd는 사전순으로 정렬하면 abcd가 우선하므로, 답은 [abcd, abce, cdx] 입니다.

1. 문제 이해하기

strings에 문자열이 담긴 리스트가 있다. 정수 n이 주어지면 각각 문자열의 n번째 문자를 비교해서 정렬하는 것이 문제이다. n번째 문자가 같을 경우 그 다음번째 문자를 비교해서 정렬한다.

2. 해결 방법

sort()를 이용해서 정렬하자! 아스키코드 기준이기 때문에

“return (first > second) — (first < second);” 이렇게 리턴 값을 작성하면 일반적인 sort() 함수처럼 작동한다. 왜냐하면 앞에 숫자가 크면 1을 반환하고 뒤에 숫자가 크면 -1를 반환하기 때문이다.

sort 메서드 내용 추가 & 수정

비교 함수는 배열 안의 인접한 요소를 비교하는 역할이다. 비교 함수는 인수를 두 개 받는다. 첫 번째 인수는 인접한 왼쪽 요소고 두 번째 인수는 인접한 오른쪽 요소이다. 비교 함수를 function(a,b)라고 했을 때 비교 함수는 다음 규칙을 따라야 한다.

  • function(a,b) < 0 이면 a를 b보다 작은 인덱스로 정렬한다.
  • function(a,b) == 0 이면 a와 b의 순서를 바꾸지 않는다.
  • function(a,b) > 0 이면 b를 a보다 작은 인덱스로 정렬한다.

문제는 n번째 문자가 같을 경우인데 이때에는

“return (a > b) — (a < b);” 그냥 매개변수로 받은 a,b 문자열 전체를 비교해버리면 된다.

3. 코드 구현

4. 결과 분석

실행결과

채점결과

5. 통과

정확성 테스트를 모두 통과하였습니다.

문제 출처

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

--

--