sort()와 reverse()는 무슨 차이가 있을까?

jinew·2024년 12월 24일

🍎 Javascript

목록 보기
5/22
post-thumbnail

오늘은 팀원분의 도움으로 해결한 이야기!
근데 알고리즘 코드카타 한 문제 푸는데 이렇게 오래 걸려도 되나 싶음😅



[오늘의 문제 / 문자열 내림차순으로 배치하기]

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

  • 입출력 예
    - s ==> "Zbcdefg"
    - return ==> "gfedcbZ"
  • 첫 번째 풀이 (이슈 발생)
  function solution(s) {
      var answer = "";
      var strArray = [];
      strArray = s.split("");
      strArray.reverse();
    
      strArray.forEach(function(item){
          answer += item
      })

      return answer;
  }
  1. sstrArray 배열에 잘라서 넣어주고, reverse()로 뒤집는다.
  2. strArray에 반복문을 사용해 answer에 문자열로 넣어준다.
  3. 프로그래머스에서 코드 실행 클릭 시 ==> "성공" 확인
  4. 제출 후 채점하기 클릭 시 ==> "실패" 알럿

vscode에서 실행해봐도 answer"gfedcbZ"로 제대로 찍히는데 뭐가 문제지?..
하고 한참 고민하다 팀원분께 "도대체 뭐가 문제일까요..?" 라고 하소연을 했는데 해답을 찾았다!
🐱팀원분 왈 : "reverse()는 단순히 순서를 뒤집는 메소드이지, '정렬'하는 메소드가 아니에요!"


홀리.. 문제의 요구사항 자체가 '문자를 큰 것부터 작은 순으로 정렬해'..인데 정렬을 안하고 뒤집기만 했구나... 바로 감사합니다!!!!!!!!!!!!!!!!!!!!!! 외치고 다시 시작 👊

  • 두 번째 풀이 (수정)
  function solution(s) {
      var answer = "";
      var strArray = [];
      strArray = s.split("");

      strArray.sort(function(a, b) {
          if(a < b) return 1;
          if(a > b) return -1;
          if(a === b) return 0;
      });
      strArray.forEach(function(item){
          answer += item
      })

      return answer;
  }
  1. strArray 를 내림차순으로 sort한다.
  2. strArray에 반복문을 사용해 answer에 문자열로 넣어준다.
  3. 성공!

  • 또 다른 풀이
  function solution(s) {
    return s
      .split("")
      .sort()
      .reverse()
      .join("");
  }
  1. sort() 하고 reverse() 하기
  2. join()을 사용해서 배열의 아이템들을 문자열로 합치기

sort() 하고 reverse() 하면 되는 것을 너무 멀리 돌아갔구나..
처음엔 sort()가 없이 reverse() 만 해서 '정렬'의 의미가 없었던 거다..!
문제를 푸는 데만 집중해서 문제의 의도를 파악하지 못한 나에게 큰 도움을 주신 🐱팀원분께 개큰감사를 전합니다!!! 😘

profile
멈추지만 않으면 도착해 🛫

0개의 댓글