내 풀이
import java.util.Arrays;
class Solution {
public String[] solution(String[] strings, int n) {
//문자의 n번째 글자를 문자의 앞에 붙인다.
for(int i=0; i<strings.length; i++) {
strings[i] = strings[i].substring(n, n+1) + strings[i];
}
//문자 배열 sort(오름차순)
Arrays.sort(strings);
//문자의 첫번째 글자 제거
for(int i=0; i<strings.length; i++) {
strings[i] = strings[i].substring(1);
}
return strings;
}
}
해설
String[] strings = {"abce", "abcd", "cdx"}이고 n=2라고 가정한다.
for(int i=0; i<strings.length; i++) {
strings[i] = strings[i].substring(n, n+1) + strings[i];
}
substring(n, n+1) -> 문자의 n번째에서 n+1까지 자르기.
ex) "abce".substring(2. 3) -> abce의 2번 인덱스부터 3번 전까지 subtring한다 -> "c"
즉, n번째 글자를 문자 앞에 추가한다. [n=2일 때 "abce" -> "cabce"]
여기까지의 결과는 strings = {"cabce", "cabcd", "xcdx"}
이제 오름차순으로 정렬하자.
Arrays.sort(strings);
"cabce"와 "cabcd"는 앞 글자가 c로 같지만 뒤에 e와 d로 오름차순으로 정렬되므로 자연스레 5번 조건인
'인덱으 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.' 는 해결된다.
여기까지의 결과는 strings = {"cabcd", "cabce", "xcdx"}
이제 앞문자를 없애주면 끝.
for(int i=0; i<strings.length; i++) {
strings[i] = strings[i].substring(1);
}
최종 strings = {"abcd", "abce", "cdx"}
다른 사람의 풀이
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;
}
}
원리는 같다. 단지 strings 배열을 arraylist에 넣어주고 collections.sort로 정렬한거..?
왜 굳이 arraylist로 처리했는지는 모르겠다. 이게 더 효율적이려나..? 아직 시간복잡도의 개념을 공부하지 않았고 깊이있는 학습을 안했기에 뭐가 더 좋은지는 모른다.
사실 이 문제는 푸는데 실패했다. 방법을 몰라서 이것저것 시도해보다가 포기한 문제다. 저렇게 n번째 문자를 앞에 둘 생각을 했다면 로직자체는 무지 쉬워서 금방 풀 문제일거다. 사고방식에 대해 훈련하는 시간이 필요한 것 같다.
https://programmers.co.kr/learn/courses/30/lessons/12915
'개발 > 코테 준비' 카테고리의 다른 글
[JS] 프로그래머스 - 프린터 (2) | 2022.02.17 |
---|---|
[JS] 프로그래머스 - 위장 (0) | 2022.02.13 |
자바 백준 1929 - 소수 구하기 (에라토스테네스의 체) (0) | 2021.10.31 |
자바 백준 1193 - 분수찾기 (설명 포함) (0) | 2021.10.26 |
자바 백준 2775 - 부녀회장이 될테야 (0) | 2021.10.21 |
댓글