- 함수의 인수는 정수로 이루어진 숫자 배열 (length 3~15)
- 배열 요소의 크기는 1~30
- 짝수면 2로 나누고, 홀수라면 1을 뺀 뒤 2로 나누기
- 모든 배열 요소가 1로 만들어야 함
- 총 나누기 연산이 몇번 필요한지 return
슬프게도 풀어내지 못했당 ^^
좀 만 더 해보면 될 것 같은데.. 될 것 같은데.. 하다가 많은 시간을 할애한 뒤,
구글링을 해보았으나 이 문제에 대해 풀이해놓은 블로그글을 볼 수 없었다.... 머지
결국 지피티오빠한테 물어봤다.
바로 풀어줬다. 재수없다 진짜......
지피티는, for of문과 while문을 사용하여 풀었다.
const n = [10, 12, 17, 2, 7];
function solution(n) {
let cnt = 0;
for(el of n) {
let num = el;
while (num !== 1) {
if (num % 2 === 0) {
num /= 2;
} else {
num -= 1;
num /= 2;
}
cnt++;
}
}
return cnt;
}
solution(n)
const n = [10, 12, 17, 2, 7];
function solution(n) {
// 연산을 카운트해줄 변수 카운터를 만들어준다.
let cnt = 0;
// 인수로 받은 n 배열에서 요소를 하나씩 뽑아서 연산해야 되기 때문에,
// for of로 반복문을 돌아준다.
for(e of n) {
// 요소를 저장해줄 변수를 만들어준다.
let num = e;
// while 문을 사용하여
// 요소가 1이 아닌동안(= 1이 될때까지) 계속 반복되도록 한다.
// 1이 되는 순간 while 문 탈출
while (num !== 1) {
// 요소가 짝수이면,
if (num % 2 === 0) {
// 요소를 2로 나눠 num에 재할당
num /= 2;
// 요소가 홀수이면,
} else {
// 요소에서 1을 빼서 재할당
num -= 1;
// 요소에서 다시 2를 나눠 재할당
num /= 2;
}
// 짝수든 홀수든, 연산이 끝나면 카운터 1상승시켜줌
cnt++;
}
}
// 최종 담긴 총합의 카운터가 담겨서 반환됨
return cnt;
}
solution(n)
이 문제 덕에, 오후 내내 for in
문이랑 for of
문 공부했다
(for in문은 객체에.. for of문은 배열에...)
맨날천날 for 문만 썼는데, for in
문과 for of
문을 좀 써야겠다는 생각이 든다
while
문도 !!!!
(while문은 조건이 true인 동안 무한루프... false면 탈출...)
알고리즘 풀이연습은 곧 자바스크립트 공부다 ... 🫨
오히려 좋을찌두...?