Algorithm JS | 프로그래머스 코딩테스트_1로 만들기

앙두·2023년 5월 25일
0

Algorithm

목록 보기
9/17

📑 문제

  • 함수의 인수는 정수로 이루어진 숫자 배열 (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면 탈출...)

알고리즘 풀이연습은 곧 자바스크립트 공부다 ... 🫨
오히려 좋을찌두...?

profile
쓸모있는 기술자

0개의 댓글