본문 바로가기
카테고리 없음

24.01.04(JS2주차 까지 복습완료.)

by 어뇨 2024. 1. 4.

TIL



  • 오늘 한 분량

알고리즘 3문제(아침 강의 때 푼 2문제 포함),JS문법 2주차 까지 복습 했습니다.

첫번째 문제는 문자열이 주어질 때 그 문자열을 뒤집어라 라는 문제는 

    function a(string) {
      let reverseStr =  " "; //뒤집은 문자를 담을 문자열
      for (let i = string.length - 1; i >= 0; i--) {
        reverseStr += string[i]
      }
      return reverseStr
    }

문자를 하나하나 추출하고 역순으로 놓으면 된다 생각해서 반복문for를 써서 만들었습니다.

두번째 문제는 숫자가 소수인지 아닌지 라는 문제였고, 

  function num(number) {
      let count = 0
      for (let i = 2; i < number - 1; i++) {
        if (number % i === 0) {
          count++;
        }
      }
      return count !== 0 ? '소수아닙니다' : '소수입니다'
    }
    console.log(num(13));

처음 생각은 소수가 소수점 자리 할때 그 소수(0.xxxx)이걸 말하는 줄 알고 해맸다가 이상한걸 깨닫고 빠르게 만들다보니 이상한 부분이 쫌 있습니다.  역시 반복문을 돌리면 된다 생각했고 i의 나머지 값이 나오면 카운트에 추가를 해서 카운트가 0이 아니라면 소수가 아니고 0이라면 소수 인 식을 만들었습니다.

마지막은 코딩테스트 문제였는데 

 function solution(numer1, denom1, numer2, denom2) {

      let a = numer1 * denom2 + numer2 * denom1 //분자의값
      let b = denom1 * denom2 // 분모의 값
      let aNum = [];
      for (let i = 1; i <= a; i++) {
        if (a % i === 0) {
          aNum.push(i);
        }

      }
      let bNum = [];
      for (let j = 1; j <= b; j++) {
        if (b % j === 0) {
          bNum.push(j);
        }
      }
      for (let u = aNum.length - 1; u >= 0; u--) {
        for (let k = bNum.length - 1; k >= 0; k--) {
          if (aNum[u] === bNum[k]) {
            a /= aNum[u]
            b /= aNum[u]
          
          }
        }
      } answer = [a, b];
      return answer;
    }

이런식으로 처음엔 반복문을 돌려서 나머지가 안나오는 수는 약수니까 그걸 추출해 배열을 만들고 
그 배열끼리 역순으로 반복문을 돌리면 공통된 가장 큰수(최대공약수) 가 나올꺼라 생각하고 했습니다.
그러나 코드 실행을 누르면 예시에 있는 2가지 경우는 통과가 되는데 다른 경우를 테스트에 넣어서 실행해보니 오답이라고 나와 문제인 부분을 생각해보니 배열을 만드는 부분과 마지막 최대 공약수를 찾는 부분에서 첫번째 공약수만 찾고 빠져 나오는게 문제 였던거 같습니다.


    function solution(numer1, denom1, numer2, denom2) {
      let a = numer1 * denom2 + numer2 * denom1; // 분자의 값
      let b = denom1 * denom2; // 분모의 값

      function gcd(x, y) {
        return y === 0 ? x : gcd(y, x % y);
      } // 재귀호출 : 자기자신을 호출

      const number = gcd(a, b);

      a /= number;
      b /= number;

      let answer = [a, b];
      return answer;
    }

최대한 어렵게 풀어볼려고 했었는데 실패했고, 최대공약수를 구하는 메서드 같은게 따로 있는건가 싶어서 검색을 해보니 
재귀함수를 쓰면 쉽게 구할수 있는걸 봤고, 충분히 공부한 뒤 썼습니다.

 

 

  • 느낀것

어떻게 푸는지 어떤식으로 접근해야하는지에 대해 알고 푸니 재밌게 풀었습니다. 

계속 할 수 있겠다란 자신감이 생겼고, 더 공부해서 어려운 문제 푸는게 기대가 됩니다.