실력 향상 일지/프로그래머스
[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