요즘 자소서만 쓰다보니 코딩에 무뎌져서 감각 좀 살릴 겸
차근차근 다시 lv.1 짜리 위주로 문제풀고있는데 정렬 문제가 생각이 안나서 멘붕
그래서 정리 할 겸 작성 해 봅니다.
시작!
내 마음대로 정렬하기
[문제 설명]
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 [sun
, bed
, car
]이고 n이 1이면 각 단어의 인덱스 1의 문자 u
, e
, a
로 strings를 정렬합니다.
[제한 조건]
- strings는 길이 1 이상, 50이하인 배열입니다.
- strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
- strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
- 모든 strings의 원소의 길이는 n보다 큽니다.
- 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
[입출력 예]
strings n return
[sun, bed, car] 1 [car, bed, sun]
[abce, abcd, cdx] 2 [abcd, abce, cdx]
[입출력 예 설명]
입출력 예 1
sun, bed, car의 1번째 인덱스 값은 각각 u, e, a 입니다. 이를 기준으로 strings를 정렬하면 [car, bed, sun] 입니다.
입출력 예 2
abce와 abcd, cdx의 2번째 인덱스 값은 c, c, x입니다. 따라서 정렬 후에는 cdx가 가장 뒤에 위치합니다. abce와 abcd는 사전순으로 정렬하면 abcd가 우선하므로, 답은 [abcd, abce, cdx] 입니다.
[문제 풀이]
문제 푸는 과정
1. 기본문제 해결 방법이 안떠올라 멘붕하기
왜냐면 맨날 문제 풀다가 정렬이 필요한 경우 자바에서 지원해주는 Arrays.sort() 메서드를 사용했기 때문 ㅋㅋㅋㅋ
2. 정렬 하기
nlog(n)의 기댓값을 갖는 퀵정렬은 구현하기 힘드니(?) 선택/버블/삽입 정렬 중 선택한다.
(개인적으로 선택 정렬이 제일 외우기 쉬우니 선택 정렬로 구현)
3. 정렬 조건에 문자열을 기준으로 할지 선택한다.
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 31 32 33 34 35 36 37 38 39 40 41 42 | public String[] solution(String[] strings, int n) { String[] answer = {}; int min; String temp; //선택 정렬 구현하기 for(int i=0; i<strings.length-1; i++) { min = i; for(int j=i+1; j<strings.length; j++) { //비교해서 가장 작은 값을 찾는다. System.out.println(" "+strings[min].substring(n, n+1)+" vs "+strings[j].substring(n, n+1)); if(strings[min].substring(n, n+1).compareTo(strings[j].substring(n, n+1))>0) { min = j; } //n번째 문자까지 같다면 걍 문자 비교하기 else if(strings[min].substring(n, n+1).compareTo(strings[j].substring(n, n+1))==0) { if(strings[min].compareTo(strings[j])>0) { min = j; } } } //min값을 i번째와 바꾼다. temp = strings[i]; strings[i] = strings[min]; strings[min] = temp; } for(String k : strings) { System.out.println(k); } return strings; } public static void main(String[] args) { // TODO Auto-generated method stub programmers_SuitMyselfSort s = new programmers_SuitMyselfSort(); String[] strings = {"sun","bed","car"};//{"abce","abcd","cdx"}; int n = 1; s.solution(strings, n); } | cs |
풀고 보니 어려운게 아니고 정리할 것도 딱히 없어보인 문제
해결방법이 갑자기 안떠올라서 ㅠㅠ
어쨋거나 정렬이 안떠올랐다는건 기본기가 부족하다는 것이니, 다시 복습하는 시간을 가져야 겠습니다.
각 정렬 알고리즘 구현 하는 시간을 가져봐야겠네요.
'알고리즘 공부 > 알고리즘 문제' 카테고리의 다른 글
백준 (2178) - 미로탐색 (java) (0) | 2019.06.04 |
---|---|
나누어 떨어지는 숫자 배열 (0) | 2019.03.12 |
빙고 개수 카운트하기 (0) | 2019.01.31 |
배열 회전 결과값 확인하기 (1) | 2019.01.26 |
도로에 가로등 전구 달기 (0) | 2019.01.26 |