[ 프로그래머스 ] : 문자열 내림차순으로 배치하기




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

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




<개념 & 문제 풀이법 생각>

다 풀고나서 다른 사람들 풀이보니까… 코드 효율성 최악이네;´༎ຶਊ ༎ຶ`; 싶었던 문제…ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

우선 문자를 대문자랑 소문자를 구별해서 다른 배열에 각각 담은다음에 그 배열을 sort로 내림차순 정렬하고

대문자가 더 작은거라고 했기때문에 뒤에다가 붙여주었다.

my solution

function solution(s) {
  var answer = '';
  const arr = s.split('');
  let arr1 = [];
  let arr2 = [];
  for(let i=0; i<arr.length; i++){
    if(arr[i] === arr[i].toUpperCase()){
      arr1.push(arr[i])
      arr1.sort((a,b) => {
        if (a > b) return -1;
        else if (b > a) return 1;
        else return 0;
      });
    }else{
      arr2.push(arr[i]);
      arr2.sort((a,b) => {
        if (a > b) return -1;
        else if (b > a) return 1;
        else return 0;
      });
    }
  }
  answer = arr2.concat(arr1);
  return answer.join('');
}

아니 우선 이 문제를 풀다가 기억해야할 개념이 2가지가 있어서 이렇게 블로깅 중인데

기억해야할 것들이

  1. 대문자/소문자 확인
  2. 문자 내림차순

이었다.



우선 대문자/소문자 확인 은,

나는 그냥 if(str.toUpperCase()) 이게 true이면 대문자를 확인할거라고 생각했는데

저렇게만 하면 안되고

if(str === str.toUpperCase()) 이렇게 비교해주어야지 대문자인지 소문자인지 구별할 수 있다.


그리고 문자 내림차순 은, 나는 항상 숫자만 해가지고

arr.sort((a,b) => b - a) 로 내림차순을 할거라고 생각했는데, 얘는 숫자에만 먹히는 애였음….

문자는

arr.sort((a,b) => {
  if (a > b) return -1;
  else if (b > a) return 1;
  else return 0;
});

이렇게 처리를 해주어야 했다.

근데 이렇게 하니까 코드가 너무 길어졌는데.. 다른 사람들 풀이를 보니까 이렇게도 쓸 수 있더라

⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️

arr.sort((a,b) => a<b ? 1:-1) 이렇게…! 이것도 기억해놔야지. 진짜 자주쓸듯





CASE 1

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

이건 다른 사람들 풀이인데,

sort를 해주고.. 그걸 뒤집었다(미쳤네 이걸 어떻게 이렇게 생각했지ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ)

그럼 내림차순을 해줄필요가 없자냐….! ヘ(。□°)ヘ

그리고 join으로 하니까 저렇게 간단하게…. 답이 나왔다.

나도 다음에는 써먹어야지



CASE 2


function solution(s) {
    return s.split('').sort((a, b) => {
        if (a > b) return -1;
        if (b > a) return 1;
        return 0;
    }).join('');
}


function solution(s) {
    return s.split("").sort((a,b) => a<b ? 1:-1).join("")
}

이게 그나마 나랑 비슷하다고… 믿고싶다. 젠장.












© 2018. by sora

Powered by sora