한 걸음씩
[프로그래머스][JS] 1로 만들기 본문
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문 밖에 나둬야한다.
문제가 어려운 건 아니지만 구현을 어떻게 해야 할지 고민을 많이 했고 삽질도 많이 했다.
마지막에 이번에도 제출한 답이 틀렸다면 내일 풀어야지!라고 생각했는데 통과가 돼서 살짝 당황했다.
'Programmers' 카테고리의 다른 글
[프로그래머스][JS] 배열 만들기 5 (0) | 2023.06.02 |
---|---|
[프로그래머스][JS] 진료 순서 정하기 (0) | 2023.06.02 |
[프로그래머스][JS] 특별한 이차원 배열 1 ✅ (0) | 2023.05.25 |
[프로그래머스][JS] 문자열 잘라서 정렬하기 (0) | 2023.05.25 |
[프로그래머스][JS] 2차원으로 만들기 (0) | 2023.05.25 |