inblog logo
|
LHS's Study Space
    알고리즘문제풀기프로그래머스

    [프로그래머스] [3차] 파일명 정렬(17686)

    lhs's avatar
    lhs
    Dec 07, 2024
    [프로그래머스] [3차] 파일명 정렬(17686)
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리4. 풀이 중 발생했던 문제
    school.programmers.co.kr
    https://school.programmers.co.kr/learn/courses/30/lessons/17686
     

    1. 문제 풀이 아이디어

    • split과 substring 메서드를 사용하여 문자열을 분리하고, sort 메서드에서 람다식을 활용하면 문제를 해결할 수 있다.

    2. 나의 정답 코드

    class Solution { public String[] solution(String[] files) { String[] answer = {}; Arrays.sort(files, (o1, o2) -> { String[] s1 = split(o1); String[] s2 = split(o2); String h1 = s1[0]; String h2 = s2[0]; if (h1.compareToIgnoreCase(h2) == 0) { Integer n1 = Integer.valueOf(s1[1]); Integer n2 = Integer.valueOf(s2[1]); return n1.compareTo(n2); } return h1.compareToIgnoreCase(h2); }); return files; } public String[] split(String s) { String h = s.split("\\d")[0]; String n = s.substring(h.length()).split("\\D")[0]; return new String[]{h, n}; } }

    3. 정리

    • 숫자를 기준으로 문자열을 나눈 뒤 첫 번째 부분을 헤더(h)에 저장한다.
    • 헤더 길이만큼 제외한 나머지 문자열에서 숫자를 추출해 n에 저장하고, 이를 배열 형태로 반환한다.
    • 정렬 과정에서는 Arrays.sort를 사용해 정렬 기준을 구현한다.
      • 헤더(h)를 비교하여 동일한 경우, 숫자(n)를 비교하여 정렬한다.
      • 헤더가 다른 경우 비교하여 정렬한다.
    • 문자열 비교 시 대소문자 구분을 무시하기 위해 compareToIgnoreCase 메서드를 사용하였다.

    4. 풀이 중 발생했던 문제

    • 처음에는 for문으로 인덱스를 탐색하여 substring으로 문자열을 구분하려 했으나, 숫자가 없는 경우 런타임 예외가 발생했다.
    • 이를 해결하기 위해 정규식을 활용한 split 메서드를 함께 사용하여 안전하게 구분할 수 있었다.
    Share article
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리4. 풀이 중 발생했던 문제

    LHS's Study Space

    RSS·Powered by Inblog