자바 초급문제로 맨땅에 해딩하기

자바 초급문제 15. 문자열 내림차순으로 배치하기

Jungsoomin :) 2020. 4. 9. 01:26

프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/12917)
자바 초급 문제의 문자열 내림차순으로 배치하기 이다.

 

처음엔 문자를 거꾸로 뒤집는다는 생각에 '배열처리가 생각보다 시간이 걸리지않을지도 모르겠다..'생각했다. 당연하게도 그 생각은..내 생각만큼 진행되지 않았고, 나는 그렇게 3h가량을 사용하게된다. 쉽지가 않더라..단순히 하나의 배열이라고 하더라도 그 것을 자유로히 제어하는 것은 마음먹은 대로 움직이지 않으며 결코 쉽지않다는 것을 깨닫게 해주고 내가 많이 부족하다는 것을 깨닫게 해주는 문제였다. 풀고나서 스스로 겸손한 마음이 많이 들었다.

많은 시도를 해보고 그만큼 많은 배움을 얻었다고 생각한다. 개인적으로 많이 기쁘고, 맞추어서 좋다는 생각보다는 더 많이 활용해 보고 싶어진다. :)

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package 문자열내림차순으로배치하기;
 
import java.util.*;
 
public class subClass {
    public String solution(String s) {
        String answer = "";
        //문자열 s에 를 내림차순으로 정렬하돼 대문자는 작은 수로 본다.
        //문자 순차를 역순으로 설정하고 대문자는 가려내서 다시 역순으로 본다.--끝.
        char[] sList = s.toCharArray();
        
        Arrays.sort(sList);//char 배열 정렬
        int leng = sList.length-1;
        char[] sList2 = new char[sList.length];
        
        for(int i =0 ; i<sList.length;i++) {
            sList2[i] = sList[leng];
            leng += -1;
            //System.out.println(sList2[i]);  여기까지 문자열 내림차순 완료됨
        }
        answer = new String(sList2);
        
        return answer;
    }
}
cs

 

 

점수를 캡쳐하지 못했다... 4점정도 받은 듯 하다.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package programmers_문자열내림차순배치;
 
import java.util.*;
 
public class subClass {
    public String solution(String s) {
        String answer = "";
        char[] charlist = s.toCharArray();
        int[] intlist = new int[charlist.length];
 
        for (int i = 0; i < charlist.length; i++) {
            intlist[i] = (int) charlist[i];
        } // 인트 값으로 저장시킴
 
        Arrays.sort(intlist);// 인트값으로 sort
        // 대문자가 작은수 소문자가 큰수 차순은 알파벳순.
        // A~Z , a~z 이렇게 정렬
        for (int i = 0; i < intlist.length; i++) {
            charlist[intlist.length - 1 - i] = (char) intlist[i];
            // charlist의 역순부터 char로 캐스팅한 intlist값 대입
            // 즉 z~a , Z~A 순으로 들어가게 됨.
        }
        answer = new String(charlist);
        // answer를 String 으로 변환 및 대입
 
        return answer;
    }
}
cs

이것은 또 다른 배열문제 접근을 용이하게 하기위해 for문으로 정렬을 역순으로 비틀어서 대입하는 방식이다.

다른 분을 풀이를 리뷰해서 만든 코드이며, 생각에 감탄했다. for문의 로컬변수 i를 -i 식으로 이용해서 역순으로 만드는 발상자체를 해본 적이 없어서 정말 충격적이고 새로웠다.

 

char의 번호를 이용해 int배열에 넣어 그것을 대문자 소문자 역순으로 돌린다니...진짜 생각도 못해본 발상이고 사고였다. 보는 순간 "와...진짜 천재시다."하고 말하고 있더라.

'사고의 다양성과 다양하게 접근하는 시점이 정말 다르구나' 라고 생각이 드는 로직이 아닐 수가 없다고 생각이 든다.

그 이후에 char 타입으로 캐스팅해서 대입시는 과정도 감탄을 자아내게 만들었다. 아는 내용이고 별 것 아닌 것처럼 넘어가기엔 짜내려가신 코드를 보면서는 절대 그럴 수가 없었다. 자동타입변환을 이용한 과정과 다시 강제타입변환으로 움직이시는게 직접 코드를 짜내려가시는 것을 본 것은 아니지만 '정말 유려한 코드를 짜내려가신다!' 하고서 생각을 해봤다.