프로그래머스_문자열_내마음대로_정렬하기(java)
2019. 3. 5. 23:53ㆍ알고리즘문제/프로그래머스
문자열 내 마음대로 정렬하기
1. 문제
https://programmers.co.kr/learn/courses/30/lessons/12915?language=java
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 [“sun”, “bed”, “car”]이고 n이 1이면 각 단어의 인덱스 1의 문자 “u”, “e”, “a”로 strings를 정렬합니다.
solution - 1) 나의 풀이 및 버블정렬 사용 (버블의 사용은 블로그 참조)
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 | class Solution { public String[] solution(String[] strings, int n) { for(int j = strings.length; j > 0; j--) { for(int i = 0; i < j-1; i++) { if(compareTo(strings[i], strings[i+1], n, n)) { swap(strings, i); } } } return strings; } public boolean compareTo(String a, String b, int n, int now) { if(a.charAt(now) > b.charAt(now)) return true; else if(a.charAt(now) == b.charAt(now)) { int next = n == now ? 0 : ++now; if(n == next) next++; return compareTo(a, b, n, next); } else return false; } public void swap(String[] strings, int i) { String temp = strings[i]; strings[i] = strings[i+1]; strings[i+1] = temp; } } | cs |
solution - 2) collection sort 활용 및 발상의 전환 (사람들이 많이 사용)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import java.util.*; class Solution { public String[] solution(String[] strings, int n) { String[] answer = {}; ArrayList<String> arr = new ArrayList<>(); for (int i = 0; i < strings.length; i++) { arr.add("" + strings[i].charAt(n) + strings[i]); } Collections.sort(arr); answer = new String[arr.size()]; for (int i = 0; i < arr.size(); i++) { answer[i] = arr.get(i).substring(1, arr.get(i).length()); } return answer; } } | cs |
solution - 3) collection sort 활용 (내가 해보고 싶었던 방법)
public static <T> void sort (T[] a, Comparator<? super T> c)
: 인자값으로 객체를 받으며, 지정된 Comparator가 가리키는 순서에 따라 지정된 객체의 배열을 정렬한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import java.util.*; class Solution { public String[] solution(String[] strings, int n) { Arrays.sort(strings, new Comparator<String>(){ @Override public int compare(String s1, String s2){ if(s1.charAt(n) > s2.charAt(n)) return 1; else if(s1.charAt(n) == s2.charAt(n)) return s1.compareTo(s2); else if(s1.charAt(n) < s2.charAt(n)) return -1; else return 0; } }); return strings; } } | cs |
참조
https://jamesdreaming.tistory.com/162
Comparable - 기본 정렬기준을 구현하는데 사용.
Comparator - 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용.
'알고리즘문제 > 프로그래머스' 카테고리의 다른 글
프로그래머스_기능개발_스택/큐(java) (0) | 2019.03.21 |
---|---|
프로그래머스_쇠막대기_스택(java) (0) | 2019.03.20 |
프로그래머스_서울에서_김서방_찾기_level1(java) (0) | 2019.03.03 |
프로그래머스_문자열 내 p와 y의 개수 (0) | 2019.03.01 |
알고리즘_문제_프로그래머스_같은 숫자는 싫어(java) (0) | 2019.03.01 |