본문 바로가기
코딩 테스트/[JAVA] programmers 코딩 테스트 연습

[Programmers/JAVA] 문자열 내 마음대로 정렬하기 / 프로그래머스 코딩 테스트 연습

by M개발자 2021. 7. 14.
반응형

문자열 내 마음대로 정렬하기

 


문제 설명

 

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.


예시

 

 

strings n return
["sun", "bed", "car"] 1 ["car", "bed", "sun"]
["abce", "abcd", "cdx"] 2 ["abcd", "abce", "cdx"]

코드 해석 및 전체 코드

 

1. 조건에 충족하기 위하여 문자열을 먼저 정렬한다.

2.  주어진 n번째 글자를 기준으로 오름차순으로 정렬한다. 

 

1. 조건에 충족하기 위하여 문자열을 먼저 정렬한다.

인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전 순으로 앞선 문자열이 앞쪽에 위치합니다.

주어진 n번째 글자만으로 정렬한다면 n번째가 같을 경우 정렬이 불가능하며, 조건을 충족시키지 못한다. 

 

입출력 예시 2번 역시 "abce"와 "abcd" 의 2번째 문자는 c로 같지만, 3번째는 d가 e보다 작기 때문에 문제가 발생한다. 그러므로 미리 정렬을 한 후 n번째 문자를 기준으로 정렬을 한다.

 

2.  주어진 n번째 글자를 기준으로 오름차순으로 정렬한다. 

문자열 중 특정 문자를 반환하는 substring() 메서드를 사용하여 두 문자를 비교한다.

 


String 문자열 비교 compareTo() 메소드

문자열 비교 후 정렬을 하기 위하여 compareTo() 메서드를 사용하였다. 

정렬을 할 때 단순히 두 값 중 어느 값이 큰지만 알면 되기 때문에, 비교가 불가능한 지점에서 문자의 아스키 값을 비교하여 두 값의 차를 반환해주는 compareTo() 메서드를 사용하였다. 

"abcd".compareTo("abcc"); // 1

전자가 클 경우 : 양수

같은 경우 : 0

전자가 작을 경우 : 음수

 

문자열 자르기 substring() 메소드

특정 문자열부터 반환하는 메서드이다.

String str = "abcd"
str.substring(1); // "bcd"
str.substring(1, 2); // "b"

str.substring(1);

요소를 한 개만 적을 시 문자열 요소 1부터 끝까지 반환한다.

str.substring(1, 2);

두 개를 적을 시 문자열 요소 1부터 요소 2까지 반환한다.

 

class Solution {
    public String[] solution(String[] strings, int n) {
        
        for(int i = 0; i < strings.length - 1; i++){
            for(int j = 0; j < strings.length - 1 - i; j++){
                if(strings[j].compareTo(strings[j + 1])> 0){
                    String temp = strings[j];
                    strings[j] = strings[j + 1];
                    strings[j + 1] = temp;
                }
            }
        }
        
        for(int i = 0; i < strings.length - 1; i++){
            for(int j = 0; j < strings.length - 1 - i; j++){
                if(strings[j].substring(n, n + 1).compareTo(strings[j + 1].substring(n, n + 1))> 0){
                    String temp = strings[j];
                    strings[j] = strings[j + 1];
                    strings[j + 1] = temp;
                }
            }
        }

        return strings;
    }
}

github

programmers

 

반응형

댓글