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

자바 초급문제 24. 문자열 내 마음대로 정렬하기

Jungsoomin :) 2020. 4. 12. 03:54

프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/12915)

자바 초급문제의 문자열 내 마음대로 정렬하기 이다.

 

다른생각은 아무것도 하지 않은 문제이다. 문제를 읽고나서 처음으로 든 생각은 단 하나 뿐이었다.

 

"실패율에서 적용 못해보았던 오버라이딩을 지금 해보자" 

 

이외에 다른 생각은 아예 안했고 그대로 찾아보기 시작했다. 실패율과의 연결 선을 인지한 순간부터 다른 해답은 나에겐 없었다.

 

계속 찾아보고 책을 찾아가며 익명구현 개체에 대한 생각을 하며 만들었다. 그 메소드의 리턴 값과 compareTo의 메서드 원리를 파악하려고 하며 노력했다. 그외에는 아무것도 생각하지 않았고..그래서 해결하게된 것 같아 감사한 마음이다.

 

일단 메소드 원리를 보니까 양수일때는 순서를 바꾸는 것을 보고 기준점이 있어야겠다. 라고 생각이 들었다.

 

그 기준점을 char타입으로 정했다. char 타입으로 정하면 숫자로 판별할 수 있는 것 때문이었다. 하다 정체되어있던 실패율 문제도, 그리고 charAt을 사용하던 문제들도 시저암호 문제도 다 이것을 위한 연계과정이라는 생각이 들었다. 다 이어져있는 문제들이구나.. 싶은 마음에 많이도 고마워했고, 늦게 깨닫게 된 나에게 안타깝기도 했고 그만큼이나 고마웠다.

 

이 문제 덕분에 실패율에 다시 한 번 도전할 수 있는 기회를 내게 주었다고 생각한다.

 

 

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
29
30
package programmers_문자열내마음대로정렬하기;
 
import java.util.*;
 
public class subClass {
    public String[] solution(String[] strings, int n) {
        String[] answer = {};
        // strings 는 문자의 배열 , n은 string 배열 글자의 인덱스 값
        // 글자의 인덱스 값의 알파벳을 찾아서 그 것을 기준으로 정렬시켜야함
        // 만약 알파벳이 같은 문자는 그다음 알파벳 기준으로 정렬
        // abce, abcd, cdx => c, c, x 이므로 abcd, abce, cdx가 됨 <<그대로 sort하면 된다.
 
        // strings[0].charAt(n)<<<기준점임 char의 숫자는 a~>z순으로 커짐 즉 작은 순으로 돌아가야함
        Arrays.sort(strings, new Comparator<String>() {
 
            @Override
            public int compare(String o1, String o2) {
                if (o1.charAt(n) == o2.charAt(n)) {
                    return o1.compareTo(o2);
                } else {
                    return (o1.charAt(n) < o2.charAt(n)) ? -1 : ((o1.charAt(n) == o2.charAt(n)) ? 0 : 1);
                }
            }
        });
 
        answer = Arrays.copyOf(strings, strings.length);
 
        return answer;
    }
}
cs