-
[프로그래머스/JAVA] 문자열 내 마음대로 정렬하기Algorithm/Java 2024. 10. 29. 21:55
https://school.programmers.co.kr/learn/courses/30/lessons/12915
[ 오답 노트 ]
❌ 기존 오답 코드import java.util.*; class Solution { public String[] solution(String[] strings, int n) { String[] answer = new String[strings.length]; // 1. strings에서 인덱스가 n인 문자 찾기 => "u", "e", "a" String[] ch = new String[1]; for(int i = 0; i < strings.length; i++) { ch[i] = String.valueOf(strings[i].charAt(n)); // "u" } // 2. 해당 문자 오름차순 정렬 // ["u", "e", "a"] -> ["a", "e", "u"] Arrays.sort(ch); // ["a", "e", "u"] // 3. 해당 문자에 해당하는 문자열 정렬 // ["a", "e", "u"] -> ["car", "bed", "sun"] for(int j = 0; j < ch.length; j++) { // strings 문자열에서 n번째 있는 문자가 "a"라면? for(int z = 0; z < strings.length; z++) { if(String.valueOf(strings[z].charAt(n)) == ch[j]) { answer[j] = strings[z]; } } } return answer; } }
📌 기존 코드의 문제점1. 배열 크기 선언 문제
String[] ch = new String[1];
- ch 배열의 크기를 1로 선언했으나, 실제로는 strings.length 크기만큼 필요합니다.
- 이로 인해 ArrayIndexOutOfBoundsException이 발생합니다.
2. 문자열 비교 방식 문제
if(String.valueOf(strings[z].charAt(n)) == ch[j])
- Java에서 문자열을 비교할 때 ==는 참조 값을 비교합니다.
- 대신 .equals()를 사용해야 문자열의 내용을 정확히 비교할 수 있습니다.
3. 정렬 논리 오류
- ch 배열을 정렬하고 그 순서대로 strings 배열을 정렬하는 방식이 부정확합니다.
- 예를 들어, 동일한 n번째 문자를 가진 문자열이 여러 개 있을 경우, 올바르게 정렬되지 않습니다.
- 사전순 정렬을 처리하지 못합니다.
4. 중복 처리 문제
- 동일한 n번째 문자가 있는 경우 여러 번 매칭되어 중복된 결과가 발생할 수 있습니다.
[ 정답 코드 & 올바른 풀이 ]
📌 올바른 풀이1. temp 배열 생성
- n번째 문자를 각 문자열 앞에 붙여 정렬 기준을 생성합니다.
- 예: strings = ["abce", "abcd", "cdx"], n = 2 → temp = ["cabce", "cabcd", "xcdx"]
2. 정렬
- Arrays.sort(temp)를 호출하면, n번째 문자를 기준으로 정렬되며 동일한 경우 사전순으로 정렬됩니다.
- 결과: temp = ["cabcd", "cabce", "xcdx"]
3. 원래 문자열 추출
- 정렬된 temp 배열에서 첫 번째 문자를 제외한 부분만 추출합니다.
- 결과: answer = ["abcd", "abce", "cdx"]
📌 정답 코드import java.util.*; class Solution { public String[] solution(String[] strings, int n) { String[] answer = new String[strings.length]; // 1. 각 문자열의 n번째 문자열과 원래 문자열을 합친 배열 생성 String[] temp = new String[strings.length]; for(int i = 0; i < strings.length; i++) { // ["usun", "ebed", "acar"] temp[i] = strings[i].charAt(n) + strings[i]; } // 2. temp 배열 오름차순 정렬 Arrays.sort(temp); // ["acar", "ebed", "usun"] // 3. 정렬된 결과에서 원래 문자열만 추출 for(int j = 0; j < answer.length; j++) { answer[j] = temp[j].substring(1); } return answer; } }
반응형'Algorithm > Java' 카테고리의 다른 글
[프로그래머스/JAVA] 이진 변환 반복하기 (0) 2024.10.30 [프로그래머스/JAVA] 콜라 문제 (0) 2024.10.30 [프로그래머스/JAVA] 숫자 문자열과 영단어 (2021 카카오 채용연계형 인턴십 문제) (0) 2024.10.29 [프로그래머스/JAVA] 두 개 뽑아서 더하기 (0) 2024.10.29 [프로그래머스/JAVA] 최대공약수와 최소공배수 (0) 2024.10.28