개발 공부 기록
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/17686#

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

사실상 tail 은 존재하지 않아도 되는 문제

숫자가 최대 5개라는 것을 알고 풀면 된다

런타임 오류가 계속 나서 반례 하나로 대입해서 풀어봤더니 풀렸다

 

head 가 끝나는 지점 + 5 보다 number 의 길이가 길어지면 idx 를 head 지점 + 5 로 조정

while 문 안에서 계속 idx ++ 하다보면 length 만큼 가기때문에 break 문 넣어줌

 

import java.util.*;

class File {
    
    String head;
    int number;
    String origin;
    
    public File(String origin) {
        this.origin = origin;
        
        int idx = 0;
        while((int) origin.charAt(idx) < 48 || (int) origin.charAt(idx) > 57) {
            idx ++;
        }
        int tmp = idx;
        head = origin.substring(0, tmp).toLowerCase();
        while((int) origin.charAt(idx) >= 48 && (int) origin.charAt(idx) <= 57) {
            idx ++;
            if(idx == origin.length()) break;
        }
        if(tmp + 5 < idx) idx = tmp + 5;
        number = Integer.parseInt(origin.substring(tmp, idx));
    }
    
    public String getHead() {
        return head;
    }
    
    public int getNumber() {
        return number;
    }
    
    public String getOrigin() {
        return origin;
    }
}

class Solution {
    public String[] solution(String[] files) {
        
        List<File> list = new ArrayList<>();
        for(String f : files) {
            list.add(new File(f));
        }
        
        list.sort(Comparator.comparing(File::getHead)
                 .thenComparingInt(File::getNumber));
        
        return list.stream().map(File::getOrigin).toArray(String[]::new);
    }
}
728x90
profile

개발 공부 기록

@찐만두

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!