실력 향상 일지/프로그래머스

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

juniordev 2022. 10. 31. 18:50

문제 설명 및 입출력 예시

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

제한사항

    - str은 길이 1 이상인 문자열입니다.

입출력 예

s return
"Zbcdefg" "gfedcbZ"

코드 & 풀이과정

class Solution {
    public String solution(String s) {
        char[] v = s.toCharArray();
        for (int i = 0; i < s.length(); i++) {
            for (int j = 0; j < s.length() - 1; j++) {
                if(v[j] - '0' < v[j+1] - '0'){
                    char tmp = v[j];
                    v[j] = v[j+1];
                    v[j+1] = tmp;
                }
            }
        }

        return String.valueOf(v);
    }
}

String s를 toCharArray를 이용해 char배열로 넣어준 후 코드를 진행시켰다.

만약 char배열 v 안에 있는 글자가 아스키코드값이 앞에 있는 것보다 작을 시 뒤로 옮겨주게 만들어줬다.


 

회고

상당히 빡셌다.

처음에든 생각은 Split을 사용해 String 배열에 글자 하나하나를 넣고 대문자가 더 작고 소문자가 더 큰걸 보아하니 아스키코드를 이용해서 풀면 되겠다는 생각을 했다.

Integer.*valueOf*(v[j]) > Integer.*valueOf*(v[j+1])

근데 이렇게 하면 | NumberFormatException: For input string: "b” | 오류가 발생하는 것이었다.

그래서 상당히 열받은 상태로 한번 껐다가 심호흡하고 다시 켜서 오류를 해결하려고 해 봤다.

일단 Integer.valueOf 자체가 문제인가 싶어서 Integer.parseInt로도 바꿔봤다.

그러나 되지 않았다.

그래서 String에서 값 하나를 Ascii로 바꾸는 건 무리라고 생각해서(지금 생각해보면 당연하다) 그냥 toCharArray()를 이용해서 Char값으로 받았고 아스키코드값을 내기 위해서는 (char값) - ’ 0’을 해줘야 하는 걸 알고 있기 때문에(추후에 글을 작성하겠다.) if에 넣어서 해결해줬다.


💻프로그래머스 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12917