코딩테스트 - 프로그래머스/JAVA

[프로그래머스 / 2018 KAKAO BLIND RECRUITMENT / 자바(JAVA)] [3차] 압축

읁; 2024. 5. 20. 21:08

[프로그래머스 / 2018 KAKAO BLIND RECRUITMENT / 자바(JAVA)] [3차] 압축

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/17684

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

[ 요약 ]

더보기

시작 시간 : PM 5:15

종료 시간 : PM 5:50

소요 시간(분) : 35분

 

도전 횟수 (제출 횟수) : 1

로직 및 풀이 참고 여부 : X

 

[ 풀어보기 ]

 

정답 풀이

📌 로직

 

📌 코드

import java.util.*;

class Solution {
    
    Map<String, Integer> dic = new HashMap<>();
    
    public int[] solution(String msg) {
        List<Integer> answerArray = new ArrayList<>();
        
        // 길이가 1인 모든 단어를 포함하도록 사전 만들기
        for(int i=0; i<26; i++) {
            dic.put((char)('A'+i)+"", i+1);
        }
        
        int last = 26; // 사전 마지막 수
        
        StringBuffer sb = new StringBuffer();
        char[] msgArray = msg.toCharArray();
        
        sb.append(msgArray[0]);
        
        for(int i=0; i<msgArray.length-1; i++) {
            // 1. 먼저 msgArray[i] (=w)를 꺼내오고, 그에 맞는 색인번호를 가지고 있는다.
            int num = dic.get(sb.toString() + "");
            
            // 2. dic에 "w+c" 가 있는지 없는지 살펴본다.
            sb.append(msgArray[i+1]);
            
            // w+c가 있으면 -> 다음 반복문으로 넘어간다.
            if(dic.getOrDefault(sb.toString(), 0) != 0) continue;
            
            // w+c가 없으면 -> 사전에 w+c를 추가하고, num을 answerArray에 추가한다.
            dic.put(sb.toString(), last+1);
            sb.setLength(0); // 사전에 추가된 sb는 비워준다.
            last++;
            answerArray.add(num);
            
            sb.append(msgArray[i+1]); // msgArray[i]를 꺼내오는 작업을 여기로..
        }
        
        answerArray.add(dic.get(sb.toString())); // 마지막으로 처리되지 않은 글자 처리
        
        return answerArray.stream().mapToInt(i -> i).toArray();
    }
    
}

 

📌 채점 결과

정확성  테스트
테스트 1 〉	통과 (15.92ms, 83.8MB)
테스트 2 〉	통과 (15.20ms, 78.4MB)
테스트 3 〉	통과 (14.42ms, 81.5MB)
테스트 4 〉	통과 (14.64ms, 79.8MB)
테스트 5 〉	통과 (15.07ms, 77.1MB)
테스트 6 〉	통과 (20.88ms, 83.3MB)
테스트 7 〉	통과 (14.37ms, 80.9MB)
테스트 8 〉	통과 (15.54ms, 72.7MB)
테스트 9 〉	통과 (12.24ms, 75.1MB)
테스트 10 〉	통과 (12.33ms, 84MB)
테스트 11 〉	통과 (13.14ms, 82.1MB)
테스트 12 〉	통과 (12.61ms, 82.9MB)
테스트 13 〉	통과 (14.00ms, 80.2MB)
테스트 14 〉	통과 (17.58ms, 71.8MB)
테스트 15 〉	통과 (15.87ms, 74.7MB)
테스트 16 〉	통과 (19.35ms, 86.7MB)
테스트 17 〉	통과 (13.60ms, 77.9MB)
테스트 18 〉	통과 (16.41ms, 74.5MB)
테스트 19 〉	통과 (13.87ms, 74.8MB
테스트 20 〉	통과 (12.50ms, 79.5MB)

채점 결과
정확성: 100.0
합계: 100.0 / 100.0

 

한 번만에 풀어서 뿌듯하구만 ... ^-^