뭐요

[프로그래머스] 외톨이 알파벳 (JAVA) 본문

Problem Solving

[프로그래머스] 외톨이 알파벳 (JAVA)

욕심만 많은 사람 2023. 6. 3. 16:18

first-try

import java.util.*;

class Solution {
    public String solution(String input_string) {
        StringBuilder sb = new StringBuilder();
        Set<Character> set = new HashSet<>();
        
        for(int i = 0 ; i < input_string.length(); i++){
            char thisCh = input_string.charAt(i);
            if(sb.toString().contains(Character.toString(thisCh)))
                continue;
            
            if(!set.contains(thisCh)){
                set.add(thisCh);
            }else{
                if(thisCh != input_string.charAt(i-1)){
                    sb.append(thisCh);
                }
            }
        }
        
        // sort by asc
        char[] answer = sb.toString().toCharArray();
        Arrays.sort(answer);
        sb.setLength(0);
        for(char ch : answer){
            sb.append(ch);
        }
        return (sb.toString().equals("")) ? "N" : sb.toString();
    }
}

문자열 순회하면서 임의로 조건 만들어서 검사해주어 풀었음

second-try

(다른 사람 풀이)

class Solution {
    public String solution(String input_string) {
        input_string = "." + input_string + ".";
        
        StringBuilder sb = new StringBuilder();
        for(char i = 'a'; i <= 'z'; i++){
            int size = input_string.split(i + "+").length;
            if(size >= 3)
                sb.append(i);
        }
        
        // return
        return (sb.length() != 0)? sb.toString() : "N";
    }
}

외톨이 알파벳이란? ⇒ 2회 이상 나타난 알파벳이 2개 이상의 부분으로 나누어진 알파벳

따라서 각 알파벳으로 split() 했을 때 나누어지는 개수가 3개 이상이면 외톨이 알파벳임

예외사항으로 검사하는 알파벳이 문자열 양끝단에 존재하면 외톨이 알파벳임에도 split() 했을 때 개수가 1이므로 검사 시작전 문자열에 “.” + 문자열 “.” 해주기