js 프로그래머스 문자열 내 마음대로 정렬하기

이명진·2022년 9월 27일
0

코드카타

목록 보기
46/69

문제요약

문자열의 배열이 주어지고 두번째 인자로 자릿수가 주어진다.
각 배열의 값들을 주어진 자릿수를 비교하여 순서를 맞추는 것이다.

단 조건은 만약 자릿수의 순서가 같다면 다음것으로 비교하는 것이다.
이 조건으로 조금 헤매었다.

내가 푼 풀이

내가 푼 로직이다.

function solution(strings, n) {
  var answer = [];
      answer=[...strings]
  answer.sort((a,b)=>{
  if(a.charAt(n)>b.charAt(n)){
    return 1
  }else if(a.charAt(n)<b.charAt(n)){
           return -1
    }else{
      if(a>b){
     
        return 1
      }else if(b>a){
        return-1
  //      if(a.charAt(n+1)>b.charAt(n+1)){
  //   return 1
  // }else if(a.charAt(n+1)<b.charAt(n+1)){
  //          return -1
    }}
  })
  return answer
              }

어찌 저찌 해서 풀게 되었는데 이해는 되지 않았다.
우선 첫번째 조건으로 자리수를 비교하여 오름차순, 내림차순으로 정렬을 해준다.
의문의 else 구문이다. 나는 자리수가 같을 경우를 생각하고 문제를 풀었다.

주석에 작성한것 처럼 n다음의 자릿수를 비교하기 위해 n+1을 사용해서 문제를 풀었다.
하지만 테스트에는 통과되지 못하다가 계속된 도전 중에 그냥 a와 b를 비교하게 되었다.
그러니 문제를 통과하게 되었다. 주어진 조건처럼 만약 자리수가 같을 경우 다음 자릿수를 비교해서 정렬을 해야 하는데. 저 조건이 안먹힌다는 게 이해가 가질 않았다.

자릿수가 비슷할 경우 그냥 일반 비교를 해서 정렬을 하는게 효과가 있다니 의아 했다.

다른사람의 풀이

다른 사람의 풀이 이다.

function solution(strings, n) {
    // strings 배열
    // n 번째 문자열 비교
    return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}

이분은 그냥 자릿수가 같을 경우를 생각하고 문제를 풀었따.
그리고 sort에서 나는 각 배열들을 string으로 생각하여 chatat으로 접근을 하였는데
배열로 접근할수 있다는 점에도 신기했다.
그리고 새로배운 localeCompare()함수
자리수를 비교하여 숫자를 리턴한다고 한다.

profile
프론트엔드 개발자 초보에서 고수까지!

0개의 댓글