[프로그래머스/JAVA] PCCP 모의고사 1회 1번 외톨이 알파벳

황인찬·2024년 9월 6일
0
post-thumbnail

[프로그래머스/PCCP] 외톨이 알파벳

https://school.programmers.co.kr/learn/courses/15008/lessons/121683

문제 설명📖

알파벳 소문자로만 이루어진 어떤 문자열에서, 2회 이상 나타난 알파벳이 2개 이상의 부분으로 나뉘어 있으면 외톨이 알파벳이라고 정의합니다.

문자열 "edeaaabbccd"를 예시로 들어보면,

a는 2회 이상 나타나지만, 하나의 덩어리로 뭉쳐있으므로 외톨이 알파벳이 아닙니다.
"ede(aaa)bbccd"
b, c도 a와 같은 이유로 외톨이 알파벳이 아닙니다.
d는 2회 나타나면서, 2개의 부분으로 나뉘어 있으므로 외톨이 알파벳입니다.
"e(d)eaaabbcc(d)"
e도 d와 같은 이유로 외톨이 알파벳입니다.
문자열 "eeddee"를 예시로 들어보면,

e는 4회 나타나면서, 2개의 부분으로 나뉘어 있으므로 외톨이 알파벳입니다.
"(ee)dd(ee)"
d는 2회 나타나지만, 하나의 덩어리로 뭉쳐있으므로 외톨이 알파벳이 아닙니다.
"ee(dd)ee"
문자열 input_string이 주어졌을 때, 외톨이 알파벳들을 알파벳순으로 이어 붙인 문자열을 return 하도록 solution 함수를 완성해주세요. 만약, 외톨이 알파벳이 없다면 문자열 "N"을 return 합니다.

제한사항🚫

  • 1 ≤ input_string의 길이 ≤ 2,600
  • input_string은 알파벳 소문자로만 구성되어 있습니다..

입출력 예

입출력 예 설명

입출력 예 #1

  • 문제 예시와 같습니다.
    외톨이 알파벳인 e, d를 알파벳순으로 이어 붙여 문자열을 만들면 "de"가 됩니다.

입출력 예 #2

  • 문제 예시와 같습니다.

입출력 예 #3

  • 모든 문자들이 한 번씩만 등장하므로 외톨이 알파벳이 없습니다.

입출력 예 #4

  • 외톨이 알파벳인 z, b를 알파벳순으로 이어 붙여 문자열을 만들면 "bz"가 됩니다.

포인트💡

  • 외톨이 알파벳: 2회 이상 나타난 알파벳이 2개 이상의 부분으로 나뉘어 있는 것
  • 외톨이 알파벳이 없다면 "N" 출력
  • 해시셋을 이용해 하나는 빈도수, 하나는 외톨이 알파벳 체크
  • 연속되면 외톨이가 아니므로 넘기기
  • 연속되지 않을 때
    • 나온적 있다 -> 외톨이 추가(부분이 나누어진 것이므로)
    • 나온적 없다 -> 빈도수 추가
  • 해시셋을 리스트로 변환 후 오름차순 정렬
  • 외톨이 알파벳 해시셋 사이즈가 0이면 "N" 아니면 알파벳 출력

풀이💡

import java.util.*;
class Solution {
    public String solution(String input_string) {
        //외톨이를 담을 해시셋
        HashSet<Character> out = new HashSet<>();
        //나왔던 알파벳 담을 해시셋
        HashSet<Character> freq = new HashSet<>();
        char input[] = input_string.toCharArray();
        //첫번째 문자 넣기
        freq.add(input[0]);
        for(int i =1; i<input.length; i++){
            //연속되면 넘기기
            if(input[i] == input[i-1]){
                continue;
            }
            //위의 조건을 만족하지 않는데 나온적 있으면 외톨이임
            if(freq.contains(input[i])){
                out.add(input[i]);
            }else{
                freq.add(input[i]);
            }
        }
        
        List<Character> outList = new ArrayList<>(out);
        Collections.sort(outList);
        StringBuilder sb = new StringBuilder();
        for(char c : outList){
            sb.append(c);
        }

        return outList.size() == 0 ? "N" : sb.toString();
    }
}
profile
찬이's 개발로그

0개의 댓글