[프로그래머스] Lv.0 코드 처리하기.java

김엄지·2024년 3월 29일

알고리즘

목록 보기
29/90

🐤 목표

앞으로 매일 꾸준히 코딩테스트를 진행하면서 단계를 높여가보자.

문제 설명

문자열 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"로 이루어진 문자열입니다.

입출력의 예

문제 풀이

class Solution {
    public String solution(String code) {
        String answer = "";
        char mode = '0';
        
        for(int i = 0; i < code.length(); i++) {
            
            // mode 변경
            if(code.charAt(i) == '1') {
                mode = mode == '0' ? '1' : '0';
                continue;
            }
            
            // mode가 '0'인 경우 짝수 추가
            if(mode == '0') {
                if(i % 2 == 0) {
                    answer += code.charAt(i);
                } 
                
            // mode가 '1'인 경우 홀수 추가
            } else {
                if(i % 2 != 0) {
                    answer += code.charAt(i);
                }
            }
        }
        return answer.isEmpty() ? "EMPTY" : answer;
    }
}

1) 조건문으로 문자가 '1'이면, 모드를 변경
이전 모드가 '0'이면 '1'로 변경하고, '1'이면 '0'으로 변경
2) 그렇지 않은 경우, 현재 모드에 따라 다음을 진행
3) 조건문으로 모드가 '0'인 경우, 짝수 인덱스에 해당하는 문자를 answer에 추가
4) '1'인 경우, 홀수 인덱스에 해당하는 문자를 answer에 추가
5) 반복문이 끝나면 answer가 비었는지 확인
비어있는 경우 "EMPTY"를 반환, 아닌 경우 answer를 반환

삼항 연산자 사용해서 풀어보고 싶어서 참고한 티스토리에서 문제 풀이 코드를 가져와봤다.


참고자료

profile
나만의 무언가를 가진 프로그래머가 되자

0개의 댓글