한 걸음씩

[프로그래머스][JS] 1로 만들기 본문

Programmers

[프로그래머스][JS] 1로 만들기

winter17 2023. 5. 26. 00:22

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

 

프로그래머스

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

programmers.co.kr

풀이 과정

function solution(num_list) {
    let cnt = 0 // num_list의 원소들이 1이될때까지 카운트할 변수
    for (num of num_list){ // num_list 배열을 반복하고
        let number = num; // number변수 초기값을 num으로 두고
        while (true){ // 무한 반복시작
            if (number === 1){ // number가 1이 되면 반복종료
                break
            }
            if (number % 2 === 0){ // 짝수일 때
                number = number / 2
                cnt += 1 // 카운트 1
            }else{ // 홀수일 때
                number = (number - 1) / 2
                cnt += 1 // 카운트 1
            }
        }
    }
    return cnt
}

num_list의 모든 요소가 1이 되어야 반복이 끝나는 문제이다.

for문이 while문을 감싸고 있어야 한다.

왜? num_list 배열을 다 돌아야 하고 배열의 원소는 모두 1이 될 때까지 연산을 해야 하니까!


리뷰

처음 풀 때 while문을 밖에두고 for문을 안에 두고 배열을 돌렸는데 문제가 안 풀려서 생각해 보니까 문제를 똑바로 안 읽었던 거였다

cnt, number 변수를 어디에다 둬야 할지 좀 헷갈렸는데 문제를 풀고 보니까 cnt는 반환할 값이니까 for문 밖에 둬야 하고 number변수는 for문의 원소를 초기값으로 두고 while문에서 사용해야 하니까 while문 밖에 나둬야한다.

 

문제가 어려운 건 아니지만 구현을 어떻게 해야 할지 고민을 많이 했고 삽질도 많이 했다.

마지막에 이번에도 제출한 답이 틀렸다면 내일 풀어야지!라고 생각했는데 통과가 돼서 살짝 당황했다.