문자열 내림차순으로 배치하기

이명진·2022년 9월 13일
0

코드카타

목록 보기
35/69

조건은 문자열을 내림차순으로 배치하는 것
알파벳이 주어지는데 대신 소문자>대문자 이고 내림차순으로 정렬하면 된다.

내가 푼 로직

 

function solution(s) {
    var answer = '';
   const Alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','o','p','q','r','s','t','u','v','w','x','y','z']
  let add = '';
  let isBigOne = [];
  let smallOne = [];
   answer = s.split('').reverse()
  for(let i = 0; i<answer.length;i++){
    let a = answer[i]
    let b = Alphabet.findIndex(e=>e===a)
    if(b === -1){
       isBigOne.push(answer[i])
    }else{
      smallOne.push(answer[i])
    }
  }
  isBigOne=isBigOne.sort().reverse()
  smallOne=smallOne.sort().reverse()
  answer = smallOne.concat(isBigOne)
  for(let j = 0; j<answer.length;j++){
    add += answer[j]
  }
    return add;
}

꽤나 복잡하게 풀었는데 콘솔찍었을때 그냥 reverse 를 했을때
대문자 들이 반대로 적용되서 분리하느냐고 한번더 돌아가게 되었다.
일단 대문자와 소문자를 분리 하는데 거창하게 했다.

그리고 분리한 값들을 정렬하고 다시 합쳐준다.

다른사람의 풀이

다른 사람의 풀이를 봤다

function solution(s) {
  return s
    .split("")
    .sort()
    .reverse()
    .join("");
}

간단하며 깔끔했다 그냥 정렬하고 리버스를 하면 되었는데 그냥 리버스 함수만 써서 잘못된것 같다.
그리고 join() 에 대해서 알게 되었다.
나는 for문을 사용해서 배열의 값 하나하나를 합쳐줬는데 더 쉬운 메소드가 있었다니

내 로직에 아래 for문을 제거 하고 join을 넣으면 이렇게 된다

function solution(s) {
    var answer = '';
   const Alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','o','p','q','r','s','t','u','v','w','x','y','z']
  let isBigOne = [];
  let smallOne = [];
   answer = s.split('').reverse()
  for(let i = 0; i<answer.length;i++){
    let a = answer[i]
    let b = Alphabet.findIndex(e=>e===a)
    if(b === -1){
       isBigOne.push(answer[i])
    }else{
      smallOne.push(answer[i])
    }
  }
  isBigOne=isBigOne.sort().reverse()
  smallOne=smallOne.sort().reverse()
  answer = smallOne.concat(isBigOne).join("")
    return answer;
}

for문을 두번 돌려야 해서 성능상에 조금 느려질까 우려도 했었는데
join하나 알고 간다.

reverse를 하면 내림차순으로 그냥 정렬되는줄 알았는데 그냥 문장을 뒤바꾸는 것이었다.
정렬 sort를 쓰고 reverse 를 쓰면 내림차순으로 정렬된다.

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

0개의 댓글