본문 바로가기

카테고리 없음

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

https://school.programmers.co.kr/learn/courses/30/lessons/181932

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문자열 code가 주어진상황에서 code를 앞에서부터 읽으며 문자가 1인경우 mode를 변경하는 룰이다.

mode에는 0과 1이 있으며 idx를 0부터 code길이 -1 까지 키워나가며 code[idx]의 값에 따라 작동한다.

시작할때 mode의 값은 0이다.

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으로 변경

그리고 마지막으로 ret문자열이 빈문자열일 경우 EMPTY 문자열을 return해야만한다.

 

문제내용에 나와있는것을 해석해서 간단하게 구현해볼수있을까 했는데 결국은 문제내용을 그대로 나열하는 방식으로 문제를 풀이한거같다.

for문을 통하여 문자열 길이만큼 반복하고 ret에다가 substring()을 사용하여 해당 문자를 담도록 지정하였다. 그리하여 조건에 맞는 경우 문자열을 추가하고 아닌 경우는 mode를 변경하는 방식으로 구현하였다. 근데 역시나 id문안에 if문들이 너무많고 좀더 좋은 풀이가 있을텐데 아쉽게도 시간내에 구현하지못해서 해당 식으로 정답을 제출하게되었다. 

class Solution {
    public String solution(String code) {
        String answer = "";
        int mode =0;

        for (int idx = 0; idx < code.length(); idx++) {
          String ret = code.substring(idx,idx+1);
            if(mode == 0){
                if(!ret.equals("1")){
                    if(idx % 2 == 0){
                        answer += ret;
                    }
                }else{
                    mode = 1;
                }
            }else {
                if(!ret.equals("1")){
                    if(idx % 2 == 1){
                        answer += ret;
                    }
                }else{
                    mode = 0;
                }
            }
        }
        if(answer.equals("")){
            answer = "EMPTY";
        }
        return answer;
    }
}

 

다른분의 문제풀이

마찬가지로 for문을 사용하여 구현하였고 charAt()을 사용하여 문자를 비교하였고 1인경우에 만 mode가 변경되면 되는것이기 때문에 해당 부분을 mode = 1- mode;로 작성하신거같다. 그리고 나머지 조건들은 else if를 사용하여 수행하는데 mode가 0이고 idx가 짝수일때 ret문자열에 code.charAt(idx)에 해당하는 문자를 붙이는 방식, 마찬가지로 mode가 1이고 idx가 홀수일때 ret문자열에 code.charAt() 해당하는 문자를 붙이는 방식이고 마지막으로 ret에 문자열이 없는경우 EMPTY 문자열을 return하는 방법으로 구현하셨다.

 

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

        for (int idx = 0; idx < code.length(); idx++) {
            if (code.charAt(idx) == '1') {
                mode = 1 - mode;
            } else if (mode == 0 && idx % 2 == 0) {
                ret += code.charAt(idx);
            } else if (mode == 1 && idx % 2 == 1) {
                ret += code.charAt(idx);
            }
        }
        if (ret.equals("")) {
            return "EMPTY";
        } else {
            return ret;
        }
    }
}

공통되는 부분을 if문으로만 설정하여 mode가 변경 될수 있게 구현하는게 핵심인거같다.

 나는 이부분을 문제에 나온설명대로 구현하려고 하다보니 복잡하게 되었다고 생각하는데 저의 풀이가 틀린점이 있다면 알려주신다면 감사하겠습니다!