본문 바로가기

Algorithm/프로그래머스

프로그래머스 level1 문제 : 문자열 내림차순으로 배치하기(java)

반응형

문제 설명 : 


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


제한 조건 : 

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



이건 생각보다 어렵지도 쉽지도 않은 문제였습니다.

더 알고리즘 적으로 생각할 문제는 아니고, 얼마만큼 자바 기본에 익숙한가, 또는 깊게 아나의 차이였던거 같네요.


저는 우선 아래처럼 풀었지만, 다양한 분들의 고수스멜을 느끼게끔.. 다른 답안도 쓰겠습니다..



1. 제가 푼 방식입니다.

StringBuilder answer = new StringBuilder();
List<Character> upperList = new ArrayList<>();
List<Character> lowerList = new ArrayList<>();

for(int i=0; i<s.length(); i++) {
if (Character.isUpperCase(s.charAt(i))) {
upperList.add(s.charAt(i));
} else if (Character.isLowerCase(s.charAt(i))) {
lowerList.add(s.charAt(i));
}
}

// 오름차순 정렬
Collections.sort(lowerList);
Collections.sort(upperList);
// 내림차순 정렬
Collections.reverse(lowerList);
Collections.reverse(upperList);
for(int i=0; i<lowerList.size(); i++) {
answer.append(lowerList.get(i));
}
for(int i=0; i<upperList.size(); i++) {
answer.append(upperList.get(i));
}

return answer.toString();

오름차순을 한 후에 reverse를 해줘야 정렬이 잘 된답니다.


2. 누군가 푸신 방법인데 존경스럽네요..

char[] sol = str.toCharArray();
Arrays.sort(sol);
return new StringBuilder(new String(sol)).reverse().toString();

StringBuilder에 sort기능이 있는지 처음 알았네요 공부공부!!!



3. 이분도 대단한거 같습니다..후

String[] arry = str.split("");
Arrays.sort(arry, Collections.reverseOrder());
StringBuffer sb = new StringBuffer();
for( String s : arry )
{
sb.append(s);
}
return sb.toString();

이렇게 푸셨는데요, 이분은 배열을 이용했네요. 저도 이방법을 쓸까 했는데..


문제 자체는 어렵지 않았던거 같습니다. 세부적인 사항을 더 잘 아냐의 차이인거 같네요. 모두 화이팅!!!


반응형