[코테/JAVA] 2017 팁스타운 : 짝지어 제거하기

    728x90
    반응형

    2021.11.14

    70번째 포스팅

     

    입사 252일차.

    코테 문제풀이 6주차 2번 문제

     

     

    0. 문제

      ① 2017 팁스타운 : 짝지어 제거하기

      ② 설명

    문제설명

    짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다.

    예를 들어, 문자열 S = baabaa 라면
    b aa baa → bb aa → aa → 의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다.

    제한사항
    • 문자열의 길이 : 1,000,000이하의 자연수
    • 문자열은 모두 소문자로 이루어져 있습니다.

      ③ 링크

    https://programmers.co.kr/learn/courses/30/lessons/12973

     

    코딩테스트 연습 - 짝지어 제거하기

    짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙

    programmers.co.kr

     

     

    1. 접근방법

      생각해낸 방법은 2가지

      ① 정규식과 반복문을 이용해서 반복되는 문자들을 제거

      ② 스택을 이용해서 반복되는 문자들을 제거

     

     

    2. 풀이

      ① 접근방법 :

      ② 풀이

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    import java.util.*;
     
    class Solution {
        /*
        * 시작시간 : 18:10
        * 종료시간 : 18:31
        */
        
        public int solution(String s) {
            int answer = normalization(s);
            return answer;
        }
        
        public int normalization(String s) {
            Stack<Character> stack = new Stack<>();
            
            for (int i = 0; i < s.length(); i++) {
            
            // 1. 스택이 비어있다면 push    
            if (stack.isEmpty()) {
                    stack.push(s.charAt(i));
                }
                else {
     
                    // 2. 스택에 들어있는 문자와 다음의 문자를 비교
                    if (stack.peek() == s.charAt(i)) {
                        stack.pop();
                    } else {
                        stack.push(s.charAt(i));
                    }
                }
            }
            
            // 3. 스택에 1글자라도 남아있다면 0을 리턴. 그 반대의 경우 1을 리턴.
            return stack.size() != 0 ? 0 : 1;
        }
    }
    cs

     

     

     

    3. 결과

     

     

    4. 주의사항

    없음

    728x90
    반응형

    댓글