프로그래머스/Lv. 0(코딩 기초 트레이닝)

[프로그래머스 코딩테스트] 코드 처리하기(Java)

Sigfriede 2023. 5. 28. 01:00

  문제 설명

  문자열 code가 주어집니다.

  code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.

  mode는 0과 1이 있으며, idx를 0부터 code의 길이 - 1까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.

  • mode가 0일 때
    • code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
    • code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다.
  • mode가 1일 때
    • code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
    • code[idx]가 "1"이면 mode를 1에서 0으로 바꿉니다.

  문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요,

  단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.

 

  제한사항

  • 1 <= code의 길이 <= 100,000
    • code는 알파벳 소문자 또는 "1"로 이루어진 문자열입니다.

 

  입출력 예

code result
"abc1abc1abc" "acbac"
import java.lang.StringBuilder;
class Solution {
    public String solution(String code) {
        StringBuilder sb = new StringBuilder();
        String[] s = code.split("");
        boolean mode = false;
        
        for (int i = 0; i < s.length; i++) {
            if (!mode && s[i].equals("1")) {
                mode = true;
            } else if (mode && s[i].equals("1")) {
                mode = false;
            }
            
            if (!s[i].equals("1") && i % 2 == 0 && !mode) {
                sb.append(s[i]);
            } else if (!s[i].equals("1") && i % 2 != 0 && mode) {
                sb.append(s[i]);
            }
        }
        
        String answer = "";
        if (sb.toString().isEmpty()) {
            answer = "EMPTY";
        } else {
            answer = sb.toString();
        }
        return answer;
    }
}

  StringBuilder를 생성합니다.

  문자열 code를 split 메소드를 이용하여 한 문자씩 구분한 원소를 배열 s에 넣습니다.

  boolean형 mode를 생성합니다. 이는 false와 true를 각각 0과 1로 구분하여 문제에서 제시한 조건을 충족시킬 것입니다.

  for문이 s의 길이만큼 순회합니다. if문에서 만약 mode가 false이고 동시에 s의 i번째 원소가 문자열 1과 같다면 mode를 true로 변경합니다. 만약 mode가 true이고 동시에 s의 i번째 원소가 문자열 1과 같다면 mode를 false로 변경합니다.

  if문에서 s의 i번째 원소가 1이 아니고 동시에 인덱스가 짝수 번째이며 동시에 mode가 false라면, append 메소드를 이용하여 s의 i번째 원소를 StringBuilder에 추가합니다. 만약 s의 i번째 원소가 1이 아니고 동시에 인덱스가 홀수 번째이며 동시에 mode가 true라면, append 메소드를 이용하여 s의 i번째 원소를 StringBuilder에 추가합니다.

  문자열 answer를 생성합니다.

  if문에서 만약 StringBuilder에 추가된 문자가 아무것도 없다면, 즉 빈 문자열이라면 answer에 "EMPTY"를 할당합니다. 그렇지 않다면 answer에 StringBuilder를 할당합니다. 반환하기 전 toString을 이용하여 올바른 문자열을 반환할 수 있도록 합니다.