프로그래머스/level 1

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

binaryJournalist 2021. 7. 21. 21:53
반응형

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

문제는 이렇다.

 

 

 

** Javascript

 

javascript 의 sort 와 reverse 함수를 아직 제대로 이해하지 못해서 내 코드는 상대적으로 긴 편이다.

sort 와 reverse 는 기본적으로 문자열을 정렬해준다. 그런데 대소문자까지 가려줄 줄은 생각도 못했다.

 

다른 사람들의 풀이를 보면 sort 는 기본적으로 대문자-알파벳순>소문자-알파벳순 이렇게 정렬해주고 reverse 는 문자 그대로 뒤집어주는 것 같다.

 

나의 풀이다.

 

function solution(s) {
    
    let lowerCaseArr = Array
        .from(s)
        .filter((str) => str === str.toLowerCase())
        .sort().reverse();
    let upperCaseArr = Array
        .from(s)
        .filter((str) => str === str.toUpperCase())
        .sort().reverse();
    return lowerCaseArr.join("") + upperCaseArr.join("")  
}

 

굳이 대소문자를 나눌 필요가 없었다.

 

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

 

 

이렇게 했어도 그냥 통과다.

 

 

추천을 가장 많이 받은 풀이는 split 함수를 이용했다.

 

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

 

 

 

** Java (2021-09-07 추가)

 

내림차순이라 -1을 곱해줬다

 

import java.util.*;
class Solution {
    public String solution(String s) {
        String[] strings = s.split("");
        Collections.sort(Arrays.asList(strings), new Comparator<String>() {
            public int compare(String s1, String s2) {
                return s1.compareTo(s2) * -1;
            } 
        });
        return String.join("", strings);
    }
}

 

 

 

추천 1등 풀이는 StringBuilder를 써줬다. StringBuilder 에는 내장함수로 reverse() 가 있다.

 

javascript와 이럴 때는 또 굉장히 유사하다.

 

import java.util.*;
class Solution {
    public String solution(String s) {
        char[] sol = s.toCharArray();
        Arrays.sort(sol);
        return new StringBuilder(new String(sol)).reverse().toString();
    }
}

 

 

 

** Python (2021-09-07 추가)

 

def solution(s):
    r = sorted(list(s),reverse = True)
    return "".join(r)
반응형