기몽수
코딩 기록일지
기몽수
전체 방문자
오늘
어제
  • 분류 전체보기 (443)
    • 알고리즘 - SWEA (210)
      • D1 (19)
      • D2 (25)
      • D3 (143)
      • D4 (21)
      • D5 (2)
    • 알고리즘 - Programmers (74)
      • Unrated (34)
      • Lv 0 (4)
      • Lv 1 (3)
      • Lv 2 (32)
      • Lv 3 (1)
    • 알고리즘 - Baekjoon (158)
      • Bronze (1)
      • Silver (65)
      • Gold (90)
      • Platinum (2)
    • 취업 (0)
    • SSAFY (1)
hELLO · Designed By 김용수.
기몽수

코딩 기록일지

알고리즘 - Programmers/Lv 2

[level 2] 짝지어 제거하기 - 12973

2023. 9. 10. 18:04

[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/12973) ### 성능 요약 메모리: 58.8 MB, 시간: 46.34 ms ### 구분 코딩테스트 연습 > 2017 팁스타운 ### 채점결과 Empty ### 문제 설명

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

예를 들어, 문자열 S = baabaa 라면

b aa baa → bb aa → aa →

의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다.

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

입출력 예
s result
baabaa 1
cdcd 0
입출력 예 설명

입출력 예 #1
위의 예시와 같습니다.
입출력 예 #2
문자열이 남아있지만 짝지어 제거할 수 있는 문자열이 더 이상 존재하지 않기 때문에 0을 반환합니다.

※ 공지 - 2020년 6월 8일 테스트케이스가 추가되었습니다.
※ 공지 - 2023년 8월 31일 테스트케이스가 추가되었습니다. 기존에 제출한 코드가 통과하지 못할 수도 있습니다.

> 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges 

 

코딩테스트 연습 | 프로그래머스 스쿨

개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!

school.programmers.co.kr

 

import java.util.*;

class Solution
{
    public int solution(String s){
        Stack<Character> stack = new Stack<>();
        
        for(int i = 0 ; i < s.length(); i++){
            char ch = s.charAt(i);
            if(stack.isEmpty()){
                stack.push(ch);
                continue;
            }
            
            if(stack.peek() == ch){
                stack.pop();
            }else{
                stack.push(ch);
            }
        }
        
        return stack.isEmpty()?1:0;
    }
}

 

--- 가독성이 더 좋은 코드 ---

import java.util.*;

class Solution
{
    public int solution(String s){
        Stack<Character> stack = new Stack<>();
        
        for(char ch : s.toCharArray()){
            if(stack.isEmpty()){
                stack.push(ch);
            }else if(stack.peek() == ch){
                stack.pop();
            }else{
                stack.push(ch);
            }
        }
        return stack.isEmpty()?1:0;
    }
}

'알고리즘 - Programmers > Lv 2' 카테고리의 다른 글

[level 2] 영어 끝말잇기 - 12981  (0) 2023.09.10
[level 2] 카펫 - 42842  (0) 2023.09.10
[level 2] 피보나치 수 - 12945  (0) 2023.09.10
[level 2] 다음 큰 숫자 - 12911  (0) 2023.09.10
[level 2] 숫자의 표현 - 12924  (0) 2023.09.07
    '알고리즘 - Programmers/Lv 2' 카테고리의 다른 글
    • [level 2] 영어 끝말잇기 - 12981
    • [level 2] 카펫 - 42842
    • [level 2] 피보나치 수 - 12945
    • [level 2] 다음 큰 숫자 - 12911
    기몽수
    기몽수

    티스토리툴바