본문 바로가기
JAVA/Coding Test Study

[Lv.0] 프로그래머스 - 세 개의 구분자 : Java

by ♡˖GYURI˖♡ 2024. 4. 30.
728x90
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

이해하기

테스트케이스는 전부 통과했는데 제출했더니 0점이었던 문제...!

만만하게 봤다가 깜짝 놀랐다 ㅜㅅ

import java.util.*;

class Solution {
    public String[] solution(String myStr) {
        myStr = myStr.replace("a", " ");
        myStr = myStr.replace("b", " ");
        myStr = myStr.replace("c", " ");
        
        String[] answer = myStr.trim().split(" ");
        
        if (answer[0].equals("")) {
            return new String[]{"EMPTY"};
        }
        
        return answer;
    }
}

 

처음에 제출했던 코드는 다음과 같다.

질문하기에서 확인한 반례를 집어넣어보니 그제야 실패.

 

 

trim을 해서 괜찮을 줄 아았더니 아니었던 것 같다.

replace로 어떻게 해결해보려 했지만 실패해서 아예 초기화시키고 다시 풀었다.

 

 

문제풀이

import java.util.*;

class Solution {
    public String[] solution(String myStr) {
        List<String> list = new ArrayList<>();
        StringBuffer sb = new StringBuffer();
        
        for (char c : myStr.toCharArray()) {
            if (c == 'a' || c == 'b' || c == 'c') {
                if (!sb.toString().equals("")) {
                    list.add(sb.toString());
                    sb.delete(0, sb.length());
                }
            } else {
                sb.append(c);
            }
        }
        
        if (!sb.toString().equals("")) {
            list.add(sb.toString());
        }
        
        if (list.size() == 0) {
            return new String[]{"EMPTY"};
        }
        
        return list.stream().toArray(String[]::new);
    }
}

 

  • List와 StringBuffer 선언
  • for문을 돌며 char 확인
    • 만약 'a', 'b', 'c' 중 하나이고
      • sb를 String으로 변환했을 때 "" (공백)이 아니라면
      • list에 지금까지 저장했던 sb를 저장해주고
      • sb는 전체 delete해서 비워줄 것
    • 'a', 'b', 'c' 중 하나가 아니라면
    • sb에 해당 char을 append
  • for문을 다 돌고나면 마지막 sb를 저장하지 않은 채 끝남
    • 마지막 sb도 ""이 아니라면 list에 저장
  • 만약 list의 size가 0이라면 저장된 게 없다는 뜻이니 "EMPTY"만 return
  • 아니라면 list를 String 배열로 변환 후 return