[프로그래머스|JAVA] 문자열 내 마음대로 정렬하기 | Comparator 사용 ⭕️ | @Override 활용 | 풀이법 2️⃣가지 | 스트림 ⭕️❌

2025. 8. 24. 15:04·💻코딩/💡Programmers
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
'💻코딩/💡Programmers' 카테고리의 다른 글
  • [프로그래머스|JAVA] 네트워크 | ↕️ DFS (깊이 우선 탐색) | 재귀적 방식
  • [프로그래머스|JAVA] 제일 작은 수 제거하기 | 3️⃣가지 풀이법 | stream 및 예외 먼저 처리 등 💬
  • [프로그래머스|JAVA] 스킬 트리 🌲 | 트리 순회 방식 | 선형 탐색
  • [프로그래머스|JAVA] 프로세스 | Queue 활용 ⭕️ | 자세한 코드 흐름 설명 💬
망꼬누나
망꼬누나
공부한 내용을 정리하는 공간입니다.
  • 망꼬누나
    망꼬누나의 개발 공부
    망꼬누나
  • 전체
    오늘
    어제
    • 분류 전체보기 (165)
      • ℹ️ 정보 및 실습 (19)
        • ☑️ Git & GitHub (8)
        • ☑️ 프로젝트 (6)
        • ☑️ 회고 및 후기 (5)
      • 🛠 CS (1)
      • 💻코딩 (88)
        • 💡Baekjoon (17)
        • 💡Programmers (71)
      • ✏️공부 (48)
        • 💡OS (1)
        • 💡Network (6)
        • 💡SpringBoot (9)
        • 💡JAVA (21)
        • 💡SQL (1)
        • 💡DB (2)
        • ☁️ Cloud (4)
        • 💡알고리즘 (4)
      • 📌 자격증 (6)
        • 📝정보처리기사 (3)
        • 📝SQLD (3)
  • 블로그 메뉴

    • 홈
    • github
  • 나의 GitHub Contribution 그래프
    Loading data ...
  • 인기 글

  • 태그

    알고리즘
    자료구조
    프로그래머스 #JAVA
    동시성제어
    Java
    Stream
    데브코스
    자바
    baekjoon
    map
    트랜잭션
    네트워크
    AWS
    GIT
    백엔드
    github
    코딩테스트
    프로그래머스
    S3
    Set
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.5
망꼬누나
[프로그래머스|JAVA] 문자열 내 마음대로 정렬하기 | Comparator 사용 ⭕️ | @Override 활용 | 풀이법 2️⃣가지 | 스트림 ⭕️❌
상단으로

티스토리툴바