연습장

21. 코드 처리하기 본문

프로그래머스/0단계

21. 코드 처리하기

js0616 2023. 6. 19. 21:19

Q . 문자열 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 = " ~~~~~~" 를 주고 

그 문자열에서 한개씩 ( code[i] ) 꺼내서 조건에 비교를 하는데 

1. 꺼낸 문자가 '1' 일경우

-> mode 의 값을 0 -> 1 또는 1 -> 0 으로 바꾸는 일종의 스위치라고 보면된다.

 

2. 꺼낸 문자가 '1' 이 아닌 다른 문자일 경우 

-> mode 의 값에 따라 

2-1. mode 가 0 일경우 

-> code 문자에서 짝수번째 문자 일 경우 ret 에 저장한다. 

-> 0번째 2번째 4번째 .... 등등 

 

2-2. mode 가 1일경우

-> code 문자에서 홀수번째 문자 일경우 ret 에 저장한다. 

 

 

간단하게 만들어 보려고했으나 머리만 아파져서 

문제 조건에 충실하게 흐름을 따라서 풀었다. 

mode 의 값을 0으로 지정하고

 

code 의 length 보다 작은 범위에서 하나씩 가져와서 for 문을 적용하였다.

 

1. mode 가 0 일때 , code[i] 가 '1' 이아니고 (mode 값 일정)  + i (인덱스) 가 짝수일때

answer 에 문자를 더해서 저장해 놓는다.

 

2. mode 가 0 일때, code[i] 가 '1' 이면 mode 값 을 변경 

 

3. mode 가 1 일때 , code[i] 가 '1' 이아니고 (mode 값 일정)  + i (인덱스) 가 홀수일때

answer 에 문자를 더해서 저장해 놓는다.

 

4. code[i] 가 '1' 이면 mode 값 을 변경 

 

5. ret (answer) 의 길이가 0 이면 EMPTY 라는 조건이 문제에 있다.


function solution(code) {
    var answer = '';
    let mode = 0;
    for (let i = 0 ; i< code.length; i++){
        if (mode == 0) {
            if (code[i] != '1' && i%2==0) {
                answer += code[i]
            }
            else if (code[i] =='1') {
                mode = 1;
            }
        }
        else {
            if (code[i] != '1' && i%2==1){
                answer += code[i]
            }
            else if (code[i] =='1') {
                mode = 0;
            }
        }
    } 
    if (answer.length == 0) {
        return "EMPTY"
    }
    return answer;
}