오늘의 목표
알고리즘 문제풀기 (O)
TypeScript 강의 완강하기 (O)
어려운것
10 / 2 = 5
(5 - 1) / 2 = 4
4 / 2 = 2
2 / 2 = 1
위와 같이 4번의 나누기 연산으로 1이 되었습니다.
정수들이 담긴 리스트 num_list가 주어질 때, num_list의 모든 원소를 1로 만들기 위해서 필요한 나누기 연산의 횟수를 return하도록 solution 함수를 완성해주세요.
``
이문제에서 처음에 어떻게 로직을 풀어갈지 생각을 이렇게하고.
정수가 있을때 짝수라면 반을 나누고 홀수라면 1을뺀뒤 반을 나눈다 결국 마지막에 1이 된다. 1이 된시점 return값을 횟수로 지정한다. 배열안에 모든 수를 1로 만들었을때 return값을 더해준다.
문제를 풀었는데 원하는 값이 도출이 되지 않았다.
``
function solution(num_list) {
let count = 0;
for(let i = 0 ; i < num_list.length;i++){
let num = num_list[i];
while(num > 1){
if(num % 2 === 0){
num /= 2
}else{
num = (num-1) / 2
}
count ++
if(num === 1){
break
}
}
}
return count;
}
``
결국 while문을 통해서 num에 숫자가 들어오면 1보다 작아질때까지 로직을 반복하게 만들고
한번 돌때마다 count숫자를 생성 하게 하여서 로직을 완성하였다.
for문 if문을 많이 사용하다보니 while문을 사용하는것이 바로바로 머리에 떠오르지 않았고
알고리즘 문제를 풀때 정말 다방면으로 생각을 해야된다는것을 느꼈습니다.
느낀점