코딩테스트/프로그래머스

[프로그래머스] Lv.0 코드 처리하기(Java)※

선SEON 2023. 10. 25. 13:17

1. 문제

 

2. 제출 답안

 

3. 다른 풀이

class Solution {
    public String solution(String code) {
        String answer = ""; 
        int mode = 0; // 0 또는 1의 값을 가지고, 현재 모드를 나타냄
        for (int i = 0; i < code.length(); i++) { // 문자열 code를 인덱스 i 이용해 반복
            if (code.charAt(i) == '1') mode = 1 - mode; // 현재 문자가 1인지 확인 후 mode 전환
            else if (i % 2 == mode) answer += code.charAt(i); // 아니라면 i와 mode가 일치하는지 확인하여 추가
        }
        return "".equals(answer) ? "EMPTY" : answer;
    }
}

가장 깔끔한 풀이인 것 같다.

 

mode가 0인 경우 => i가 짝수 인덱스여야 함

mode가 1인 경우 => i가 홀수 인덱스여야 함

 

이 조건을 충족시 answer문자열에 현재 문자가 추가, 문자열 반복

class Solution {
    public String solution(String code) {
        StringBuilder answer = new StringBuilder();
        int mode = 0;
        for (int i = 0; i < code.length(); i++) {
            char current = code.charAt(i);
            if (current == '1') { // 현재 문자가 1이면 mode 전환
                mode = mode == 0 ? 1 : 0;
                continue;
            }

            if (i % 2 == mode) { // i가 mode와 일치하는지 확인
                answer.append(current); // 현재 문자가 answer 문자열에 추가
            }
        }
        return answer.length() == 0 ? "EMPTY" : answer.toString();
    }
}

위와 거의 동일하지만 약간은 다른...

 

StringBuilder를 사용하여 결과 문자열을 생성한다.