코딩테스트/프로그래머스

PCCP 모의고사 1회 - 외톨이 알파벳

feel2 2023. 2. 16. 00:30
반응형

1. 문제 정의

2. 문제 접근

문자열을 하나씩 떼어서 문자로 만든 후, for문을 돌면서 연속해서 중복되는지를 판별해주면 될 것 같다.

체크를 위해 문자를 key로 하는 map과 set을 써서 비교를 위한 객체 하나와 정답을 담을 객체 하나를 정의해서 문제를 풀이할 것이다.

Set 은 요소의 저장 순서를 유지하지 않고, 같은 요소의 중복 저장을 허용하지 않는 특징이 있다.

HashSet, TreeSet 등이 있으며, TreeSet은 위의 기능 + 오름차순 정렬이라는 특징까지 가지고 있어서 TreeSet으로 정답 객체를 구현하였다.

3. 문제풀이

  1. 문자를 담아줄 객체 Map 과 정답을 담아줄 객체 Set 을 정의한다.
  2. 입력 받은 String 을 Char 배열로 Casting 해준다.
  3. for문을 돌면서 조건을 확인한다.
    3-1. 현재 문자와 비교 문자를 비교한다.
    3-2. 만약 현재 문자와 비교 문자가 같지 않다면 map에 현재 문자가 들어있는지 확인한다.
    3-3. 만약 map에 현재 문자가 들어있다면 연속해서 나온 문자가 아니기 때문에 set에 추가해준다.
    3-4. 현재 문자를 map에 넣어준다.
    3-5. 현재 문자를 비교 문자로 다시 치환해준다.
  4. set에 있는 문자들을 정답에 추가해준다.
  5. 정답을 출력한다.

4. 코드

import java.util.*;

class Solution {

    public String solution(String input_string) {

        String answer = "";

        Map<Character,Boolean> map = new HashMap<>();
        Set<Character> set = new TreeSet<>();

        char[] char_arr= input_string.toCharArray();
        char curr_char=' ';

         for(char now_char:char_arr){                     
             if(curr_char!=now_char){
                 if(map.containsKey(now_char)){
                     set.add(now_char);
                 }               
                map.put(now_char,true);
                curr_char=now_char;
             }
        }

        for(char cha :set){
            answer+=cha;
        }

        if(answer.equals("")) {
            answer = "N";
        }



        return answer;
    }

}

5. 회고

문제 자체는 쉬운것 같은데 구현하려는데 생각보다 오래 걸렸다.

반응형