프로그래머스 코드 처리하기

KIMYEONGJUN·2026년 5월 8일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

문자열 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 합니다.

내가 이 문제를 보고 생각해본 부분

Main13 클래스에 main 메서드를 만들어 Solution 객체를 생성하고 테스트할 문자열을 전달하였다.
solution 메서드는 주어진 문제의 규칙대로 문자열을 처리한다.
mode 변수는 0 또는 1 값을 가지고, 문자가 '1'일 때마다 토글된다.
mode가 0이면 짝수 인덱스 문자만 결과에 추가하고, mode가 1이면 홀수 인덱스 문자만 결과에 추가한다.
'1'은 결과 문자열에 포함하지 않는다.
결과 문자열이 빈 문자열이면 "EMPTY"를 반환한다.

코드로 구현

class Solution {
    public String solution(String code) {
        StringBuilder ret = new StringBuilder();
        int mode = 0; 
        
        for(int i = 0; i < code.length(); i++) {
            char ch = code.charAt(i);
            
            if(ch == '1') {
                mode = (mode == 0) ? 1 : 0;
            } else {
                if(mode == 0 && i % 2 == 0) {
                    ret.append(ch);
                } else if(mode == 1 && i % 2 == 1) {
                    ret.append(ch);
                }
            }
        }
        
        if(ret.length() == 0) {
            return "EMPTY";
        }
        
        return ret.toString();
    }
}

프로그래머스 코드

package programmers;

// 프로그래머스 코드 처리하기
public class Main13 {
    public static void main(String[] args) {
        Solution solution = new Solution();
        String code = "abc1abc1abc";
        String result = solution.solution(code);
        System.out.println(result);
    }
}

class Solution {
    public String solution(String code) {
        StringBuilder ret = new StringBuilder();
        int mode = 0;

        for (int i = 0; i < code.length(); i++) {
            char ch = code.charAt(i);

            if (ch == '1') {
                mode = (mode == 0) ? 1 : 0;
            } else {
                if (mode == 0 && i % 2 == 0) {
                    ret.append(ch);
                } else if (mode == 1 && i % 2 == 1) {
                    ret.append(ch);
                }
            }
        }

        if (ret.length() == 0) {
            return "EMPTY";
        }
        return ret.toString();
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글