[Programmers] PCCP 모의고사 1 - 1번

Sierra·2023년 1월 14일
1

[Programmers] PCCP

목록 보기
1/2
post-thumbnail

문제 설명

알파벳 소문자로만 이루어진 어떤 문자열에서, 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은 알파벳 소문자로만 구성되어 있습니다..

입출력 예

input_stringresult
"edeaaabbccd""de"
"eeddee""e"
"string""N"
"zbzbz""bz"

Solution

import java.util.HashMap;

class Solution {
    public String solution(String input_string) {
        String answer = "";
        HashMap<Character, Integer> countExpose = new HashMap<>();
        HashMap<Character, Integer> countDivide = new HashMap<>();
        char prevChar = '-';
        for(int i = 0; i < input_string.length(); i++){
            char tmp = input_string.charAt(i);
            countExpose.put(tmp, countExpose.getOrDefault(tmp, 0) + 1);
            if(prevChar != tmp){
                countDivide.put(tmp, countDivide.getOrDefault(tmp, 0) + 1);
                prevChar = tmp;
            }
        }

        for(char a : countExpose.keySet()){
            if(countDivide.get(a) >= 2 && countExpose.get(a) >= 2){
                answer += a;
            }
        }
        if(answer == ""){
            answer = "N";
        }

        return answer;
    }
}

나타난 횟수, 그리고 분리 된 횟수를 HashMap에 저장해두었다가 나중에 최종 결과를 비교 해 보면 된다.
아주 간단한 문제.

profile
블로그 이전합니다 : https://swj-techblog.vercel.app/

0개의 댓글