코딩테스트연습/프로그래머스

[프로그래머스 - JAVA] 문자열 내 마음대로 정렬하기

:)jun 2021. 12. 16. 00:30

https://programmers.co.kr/learn/courses/30/lessons/12915

 

코딩테스트 연습 - 문자열 내 마음대로 정렬하기

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

programmers.co.kr

// 주어진 배열 정렬기준 줘서 n인덱스가 같을때는 사전배열, 다를때는 n인덱스 사전배열 구현하면 되겠다.

// 테스트코드
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class Quiz1_SortingStringsTest {

    Quiz1_SortingStrings q;

    @BeforeEach
    void setUp() {
        q = new Quiz1_SortingStrings();
    }

    @Test
    void test1() {
        assertArrayEquals(new String[]{"car", "bed", "sun"}, q.solution(new String[]{"sun", "bed", "car"}, 1));
    }

    @Test
    void test2() {
        assertArrayEquals(new String[]{"abcd", "abce", "cdx"}, q.solution(new String[]{"abce", "abcd", "cdx"}, 2));
    }

}

// 프로덕션코드
import java.util.Arrays;
import java.util.Comparator;

public class Quiz1_SortingStrings {
    public String[] solution(String[] strings, int n) {
        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);
                }

                if (o1.charAt(n) > o2.charAt(n)) {
                    return 1;
                }

                return -1;
            }
        });
        return strings;
    }
}

// 성공! 리팩토링하자

//프로덕션코드 
import java.util.Arrays;
import java.util.Comparator;

public class Quiz1_SortingStrings {
    public String[] solution(String[] strings, int n) {
        sorting(strings, n);
        return strings;
    }

    private void sorting(String[] strings, int n) {
        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);
                }

                if (o1.charAt(n) > o2.charAt(n)) {
                    return 1;
                }

                return -1;
            }
        });
    }
}

// 굿!