프로그래머스 2017 팁스타운 짝지어 제거하기 [JAVA] - 22년 8월 8일

Denia·2022년 8월 8일
0

코딩테스트 준비

목록 보기
30/201

while문 + String.replace() 사용

package com.company;

public class Solution {
    static public void main(String[] args) {
        String str1 = "baabaa";
        String str2 = "cdcd";

        System.out.println(solution(str1));
        System.out.println(solution(str2));
    }

    static public int solution(String str)
    {
    	//문자열을 계속해서 탐색할 While문
        while (true) {
        	//replace 메서드 실행 후 문자열을 비교할 변수 생성
            String afterStr = str;

			//a~z 까지 동일하게 반복된 문자열을 제거
            for (char c = 'a'; c <= 'z'; c++) {
            	//aa , bb 같은 문자열을 만들어줄 tempStr
                String tempStr = "" + c + c;
                //replace 메서드를 이용하여 tempStr을 공백으로 처리
                str = str.replace(tempStr, "");
            }

			//for문 작업 후 str 과 afterStr이 동일하다면 replace에 의해 변경된 부분이 없으므로 삭제할 부분이 없다는 것이고 더이상 replace가 안되므로 return 0
            if(afterStr.equals(str)){
                return 0;
            }

			//for문을 무한정 돌다가 str의 길이가 0이 되면 모두 변환이 되었으므로 return 1
            if(str.length() == 0) {
                return 1;
            }
        }
    }
}

[테스트케이스는 모두 통과 / 효율성 테스트 실패]

Stack 사용

package com.company;

import java.util.Stack;

public class Solution {
    static public void main(String[] args) {
        String str1 = "baabaa";
        String str2 = "cdcd";

        System.out.println(solution(str1));
        System.out.println(solution(str2));
    }

    static public int solution(String str) {
    	//Stack을 사용
        Stack<Character> stack = new Stack<Character>();

		//문자열을 Stack에 넣어주면서 같은 문자가 있는지 확인
        for (int i = 0; i < str.length(); i++) {
        	//str에서 char을 1개 받아온다.
            char tempChar = str.charAt(i);
            
            //stack이 비어있지 않을때 peek를 해서 넣으려는 
            //char가 동일한게 있으면 tempChar을 Stack에 넣지 않고
            //기존에 들어있던 데이터도 뺀다 (=stack.pop())
            if(!stack.isEmpty() && stack.peek().equals(tempChar)){
                stack.pop();
            }else{
            	//위의 조건에 해당하지 않으면 데이터를 넣으면 된다.
                stack.push(tempChar);
            }
        }

		//마지막까지 확인을 했을때 데이터가 남아있지 않으면 
        //변환이 모두 잘 된것이므로 return 1
        if(stack.isEmpty()) return 1;

		//데이터가 남아있으면 다 제거를 못했으므로 return 0
        return 0;
    }
}

[테스트케이스는 모두 통과 / 효율성 테스트 통과]

profile
HW -> FW -> Web

0개의 댓글