본문 바로가기
Blog/TIL

[240616] 문자열 자르기

by 코젼 2024. 6. 16.
728x90
반응형

🔶substring


목차

    / 오늘의 TIL /


    Substring

    문자열 잘라서 비교 가능

    import java.util.*;
    
    public class Main {
        /**
         * @param msg 문자열
         * @return map key 배열
         */
        public static int[] solution(String msg) {
    
            Map<String, Integer> alphabet = new LinkedHashMap<>();
            //알파벳 초기화
            for (int i = 0; i < 26; i++) {
                alphabet.put(String.valueOf((char)('A' + i)), i+1);
            }
    
            List<Integer> result = new ArrayList<>();
            int idx = 0;
    
            //msg 문자열 길이 -1 만큼 진행(문자열 두 글자 이상씩 비교 필요)
            while (idx < msg.length()-1) {
                //임시 문자열(key 비교 대상)
                String tmp = "";
                //전 문자열
                String pre = String.valueOf(msg.charAt(idx));
    
                //비교대상 문자열 ~ 마지막 길이 문자까지 문자 더하면서 비교
                for (int i = 1; idx+i <= msg.length(); i++) {
                    //i글자만큼 문자열을 잘라서 임시로 저장해둔다.
                    tmp = msg.substring(idx, idx+i);
                    //키가 없는 경우
                    if (!alphabet.containsKey(tmp)) {
                        //key로 추가한다.
                        alphabet.put(tmp, alphabet.size()+1);
                        break;
                    }
                    //가장 긴 문자열에 대해 key 값을 수정한다. (변경 예시: K 저장 -> KA 저장)
                    pre = tmp;
                }
                //key에 맞는 값을 가져와서 저장한다.
                result.add(alphabet.get(pre));
                //key로 추가한 값 다음부터 인덱스 시작
                idx = idx + pre.length();
            }
    
            if (idx == msg.length()-1) {
                result.add(alphabet.get(String.valueOf(msg.charAt(idx))));
            }
            return result.stream().mapToInt(i -> i).toArray();
        }
    
    
        public static void main(String[] args) {
            String a = "KAKAO";
            int[] solution = solution(a);
            for (int i : solution) {
                System.out.println(i);
            }
        }
    }
    728x90
    반응형

    'Blog > TIL' 카테고리의 다른 글

    [240618] 트리 + 해시맵  (0) 2024.06.18
    [240617] 트리  (0) 2024.06.17
    [240614] stream, lombok  (0) 2024.06.14
    [240613] java8 stream  (0) 2024.06.13
    [240612] swagger ui api 사용하기  (0) 2024.06.12

    댓글