문제

제출

코드

let answer = [];
function solution(N) {
    let tmp = [];//이진수를 저장할 배열


    while(true){//tmp에 이진수를 담음
        if(N==0){
            break;
        }else if((N%2)==0){
            tmp.unshift(0);
        }else if((N%2) == 1||N==1){
            tmp.unshift(1);
        }

        N = parseInt(N/2);
    }
    
    let i = 0;

    if(!(tmp.includes(1, i)&&tmp.includes(1, i+1))){
        //tmp의 배열 안에 1을 가진 수가 두 곳에 위치하지 않으면 출력할 값을 0으로
        answer.push(0);
        return parseInt(answer.join());
        }else{
            while(true){
                
                let start = tmp.indexOf(1, i);
                let end = tmp.indexOf(1, start+1);
                answer.push((end-start)-1);
                i++;
                if(!(tmp.includes(1, i+1))){
                    break;
                }
            }
            answer = Math.max.apply(null, answer);
            return answer;
        }
}

테스트 케이스 결과

낮은 난이도의 문제여서 테스트 케이스 결과가 정확도만 나와있다.
아마 효율성을 따졌다면 좋은 결과는 안 나왔을 것 같다.

느낀 점

코딜리티에서 처음 문제를 풀어봤는데 제일 낮은 난이도였지만 아직 초보인 나에게는 생각보단 복잡한 문제라고 생각했다.
그래도 노트에 차근차근 단계 별로 끄적인 후에 구현을 해봤는데 우선 2진수를 만드는 것은 java에서는 해봤지만 js에서는 메소드가 아닌 방법으로 해본 적이 없어 경험삼아 메소드가 아닌 직접 일일히 써보았다.

처음에 계속 실행 오류가 났는데 잘 찾아보니 문법 군데군데 오류가 있어서 그랬다. 코드 타이핑 시에 더 신중히 쓰도록 해야겠다.

또한 여전히 뭔가 코드가 지저분해 보인다. 분명히 메소드나 함수 조합을 하면 더 간결하고 시간복잡도가 낮은 코드를 써낼 수 있을 것이다.

profile
https://github.com/WonseoYang

0개의 댓글