[ 프로그래머스 ] : 문자열 내림차순으로 배치하기
in Algorithm
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가지가 있어서 이렇게 블로깅 중인데
기억해야할 것들이
- 대문자/소문자 확인
- 문자 내림차순
이었다.
우선 대문자/소문자 확인 은,
나는 그냥 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("")
}
이게 그나마 나랑 비슷하다고… 믿고싶다. 젠장.