본문 바로가기

코테/프로그래머스

[PCCP모의고사] 외톨이 알파벳 (Java ver.)

https://school.programmers.co.kr/learn/courses/15008/lessons/121683?language=java 

 

프로그래머스

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

programmers.co.kr

class Solution {
    public String solution(String inputString) {
        HashSet<String> answer = new HashSet<>();
        List<String> list = new ArrayList<>();
        char[] inputStringToArray = inputString.toCharArray();

        String input = String.valueOf(inputStringToArray[0]);

        for (int i = 1; i < inputStringToArray.length; i++) {
            // 앞에 문자와 같지 않다면 map 에 집어 넣는다.
            if (!String.valueOf(inputStringToArray[i]).equals(String.valueOf(inputStringToArray[i - 1]))) {
                if (list.contains(input)) {
                    answer.add(input);
                } else {
                    list.add(input);
                }
                input = String.valueOf(inputStringToArray[i]);
            }

            // 맨 마지막 경우의 수
            if (i == inputStringToArray.length - 1 && list.contains(input))
                answer.add(String.valueOf(input.charAt(0)));
        }

        return !answer.stream().sorted().collect(Collectors.joining()).equals("") ? answer.stream().sorted().collect(Collectors.joining()) : "N";
    }
}

알파벳이 여러개 붙었을 때 개수가 같아야 하는줄 알고 풀었다가 고쳐서 코드가 효율적이지 못하고 난해해졌다. 다음에 시간 날때 다시 풀어봐야지..

결국 연속해서 나오는 알파벳이여도 연속되는 개수는 상관이 없으므로 (A = AAA) 따라서 전체 문장 중에 알파벳이 하나 건너 뛰어서 나오는 경우만 찾아내면 된다.

어떤 알파벳인지 알아내는 방법으로 char 아스키 코드를 활용하면 97이 소문자 a이므로 97 + 0~26까지 반복문 돌려서 어떤 알파벳인지 알아낼 수 있다.