2023.09.19.TUE

ronglong·2023년 9월 19일
0

[ 프로그래머스 ]

[ 대충 만든 자판 ]

import java.util.*;

class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        int[] answer = new int[targets.length];
        
        for(int j=0; j<targets.length; j++){
            String target = targets[j];
            int count = 0;
            
            for(int i=0; i<target.length(); i++){
                char c = target.charAt(i);
                List<Integer> idxList = new ArrayList<>();
                
                for(String key : keymap){
                    //각 키를 뒤져서 인덱스 번호가 작은 것을 채택
                    int idx = key.indexOf(c+"");
                    if(idx == -1){
                        continue;
                    } else {
                        idxList.add(idx);
                    }
                }
                
                if(idxList.size()==0){
                    count = -1;
                    break;
                } else {
                    int min = Collections.min(idxList);
                    count += (min+1);
                    idxList.clear();
                }
            }
            answer[j] = count;
        }
        
        return answer;
    }
}

[ 신규 아이디 추천 ]

: 순서대로 문제에 제시된대로 구현했다.

2단계, 3단계에서 정규식 좀 찾아봄.
matches() 메서드 사용했다가 잘 안 되길래, replaceAll() 메서드 사용.
다른 사람 풀이 보니까, 앞뒤 . 제거하는 것도 정규표현식으로 깔끔하게 푼 사람이 있어서 인상적이었다.

그리고 클래스 하나 파서, 메서드 다 추출한 사람도 깔끔했음. 가장 자바다운,,

class Solution {
    public String solution(String new_id) {
        String answer = "";
        
        //1단계
        new_id = new_id.toLowerCase();
        
        //2단계
        new_id = new_id.replaceAll("[^a-z0-9-_.]", "");
        
        //3단계
        new_id = new_id.replaceAll("[.]{2,1000}", ".");
        
        //4단계
        int len = new_id.length();
        
        if(len > 0 && new_id.charAt(0) == '.'){
            new_id = new_id.substring(1);
        }

        len = new_id.length();
        if(len > 0 && new_id.charAt(len - 1) =='.'){
            new_id = new_id.substring(0, len - 1);
        }
        
        //5단계
        if(new_id.length()==0){
            new_id = "a";
        }
        
        //6단계
        if(new_id.length()>15){
            new_id = new_id.substring(0, 15);
        }
        
        if(new_id.length() == 15 && new_id.charAt(14) =='.'){
            new_id = new_id.substring(0, 14);
        }
        
        //7단계
        while(true){
            if(new_id.length()<=2){
                new_id += new_id.charAt(new_id.length()-1);
            } else {
                break;
            }
        }
        
        return new_id;
    }
}

0개의 댓글