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

2021. 11. 14. 18:39
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

BELATED ARTICLES

more