728x90
반응형
[문제 링크]
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[문제]

📍 [코드]
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) {
// 먼저 n번째 문자 비교
if (s1.charAt(n) != s2.charAt(n)) {
return Character.compare(s1.charAt(n), s2.charAt(n)); // 아스키코드 값 비교 (양수면 s1, 음수면 s2가 크다)
}
// n번째 문자가 같으면 사전순 비교
return s1.compareTo(s2); // 문자열 전체 사전순
}
});
return strings;
}
}
💡 접근법
Arrays.sort통해 정렬을 하며Comparator을 오버라이드하여 원하는 순으로 정렬하는 비교 메서드 활용- n번째 문자를 하나씩 비교하며
- ❌ 같지 않으면 아스키코드 값으로 비교
➡️ 예를 들어 s1 = a, s2 = b이면,a > b이므로 양수가 나올 것이다.
➡️ 즉, s1 먼저 - ⭕️ 같으면 문자열 전체 사전순으로 비교
- 정렬된 string 배열 반환
✅ Arrays.sort(strings, new Comparator<String>() { ... }) 문법 활용
✅ Comparator 활용
📚 흐름 정리
Arrays.sort(배열, 비교기)→ 배열을 내가 정의한 비교 기준으로 정렬new Comparator<String>() { ... }→ 비교기를 직접 만드는 부분compare(o1, o2)메서드에서:- 음수 반환 → o1 먼저
- 0 반환 → 순서 같음
- 양수 반환 → o2 먼저
📍 [Stream 방식]
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
return Arrays.stream(strings)
.sorted(Comparator.comparingInt((String s) -> s.charAt(n))
.thenComparing(Comparator.naturalOrder()))
.toArray(String[]::new);
}
}
✅ 훨씬 간결한 코드
💬 마무리
비교기를 만들 수 있다는 것을 알기 전까지는 길고 비효율적인 코드로 작성을 했는데,
이 방법을 알고나니 번거로운 사소한 작업을 안할 수 있게되어 효율적인 것 같다.
역시 많은 것을 아는 것이 힘인 것 같다 !
또한, 스트림 방식이 간결하고 쉽지만, 아직 익숙치 않아서 오히려 어렵게 느껴지는 것 같다ㅜㅜ
728x90
반응형
'💻코딩 > 💡Programmers' 카테고리의 다른 글
| [프로그래머스|JAVA] 네트워크 | ↕️ DFS (깊이 우선 탐색) | 재귀적 방식 (0) | 2025.08.24 |
|---|---|
| [프로그래머스|JAVA] 제일 작은 수 제거하기 | 3️⃣가지 풀이법 | stream 및 예외 먼저 처리 등 💬 (0) | 2025.08.24 |
| [프로그래머스|JAVA] 스킬 트리 🌲 | 트리 순회 방식 | 선형 탐색 (0) | 2025.08.24 |
| [프로그래머스|JAVA] 프로세스 | Queue 활용 ⭕️ | 자세한 코드 흐름 설명 💬 (0) | 2025.08.24 |
| [프로그래머스|JAVA] 올바른 괄호 | 스택 사용 ⭕️ | 간단 풀이 | 스택 사용 ❌ 방법 | 풀이법 2️⃣가지 (2) | 2025.08.24 |
