https://school.programmers.co.kr/learn/courses/30/lessons/12915
문제 접근
풀다가 시간 오래 걸려서 다른 사람 풀이를 봐야될 때 뭔가 되게 분하다
이걸 못풀어서 답을 봐야되나 같은 느낌이랄까
자른 인덱스 정렬 후 기존 단어들도 다시 정렬 해줄 때 단어마다 점수를 부과해서 정렬해야되나, 위치 인덱스에 따라 어떻게 해줄 순 없을까 생각이 많았다.
이 분은 List를 만들어서 정렬해놓은 자른 인덱스랑 기존 단어들의 인덱스 위치랑 비교해서 같다면 자른 인덱스의 위치에 해당 단어들을 다시 삽입해주면서 기존 단어들을 재정렬 해주었다.
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
Arrays.sort(strings); // 자른 인덱스 문자가 같을 경우 단어의 오름차순으로 비교해야되기 때문에 미리 정렬
String[] answer = new String[strings.length]; // strings의 단어 인덱스를 자른 배열
for(int i=0; i<strings.length; i++) answer[i] = strings[i].substring(n, n+1); // n부터 n+1보다 1작은 곳 까지 자르기 → n번 째 문자만 나옴
Arrays.sort(answer); // 자른 인덱스들을 오름차순 정렬
List<String> wordList = new ArrayList<>(Arrays.asList(strings)); // strings 배열을 List로 생성
for(int i=0; i<answer.length; i++) { // 반복문 돌면서 자른 인덱스랑 기존 문자들의 인덱스 위치와 같은 지 검토
// 자른 인덱스는 오름차순 정렬 되있기에 위치가 같다면 해당 자른 인덱스 위치에 기존 단어 삽입
for(int j=0; j<wordList.size(); j++) {
if(wordList.get(j).substring(n, n+1).equals(answer[i])) {
answer[i] = wordList.get(j);
wordList.remove(j); // 같은 문자가 오면 중복되기에 삭제해주기
break;
}
}
}
return answer;
}
}
다른 사람 풀이
자른 인덱스 문자와 기존 문자들을 같이 List에 담아서 만들었다.
이렇게 만들고 List를 정렬하면 자른 인덱스의 순서에 맞게 정렬되기 때문에 뒤에 붙어있는 단어들도 정렬이 됨
한 번에 문제 해결
이후 반복문에서 인덱스 순서대로 단어 부분만 잘라내서 answer 배열에 넣음
자른 인덱스 문자랑 기존 문자를 붙였다는 게 참 신박하다.
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;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 폰켓몬 / JAVA / 해시] (0) | 2023.03.23 |
---|---|
[프로그래머스 / 2016년 / JAVA] (0) | 2023.03.23 |
[프로그래머스 / 소수 찾기 / JAVA] (0) | 2023.03.22 |
[프로그래머스 / 소수 만들기 / JAVA] (0) | 2023.03.21 |
[프로그래머스 / [1차] 비밀지도 / JAVA] (0) | 2023.03.20 |
댓글