🍀 코딩 테스트/프로그래머스 23

LV1- 최대공약수와 최소공배수

최대공약수 최대공약수는 두 수 A와 B의 공통된 약수 중에 가장 큰 정수이다. 최대공약수를 구하는 가장 쉬운 방법은 2부터 min(A, B)까지 모든 정수로 나누어보는 방법이다. 최소공배수 두 수, 혹은 그 이상의 여러 수의 공통인 배수 중 가장 작은 수이다. lcm을 1부터 시작하여 점차 lcm++하면서 각각의 두 수를 lcm으로 나누었을 때 나머지 값이 0인지를 비교한다. function solution(n, m) { let gcd = 1; // 최대공약수 let lcm = 1; // 최소공배수 // 최대공약수를 구하는 방법 -> 2부터 min(n,m)까지 모든 정수로 나누어본다. for (let i = 2; i 둘 모두 공통으로 나누어 떨어지는 최소의 수를 구한다음 나온다. while (true) ..

LV1 - 행렬의 덧셈

풀이 function solution(arr1, arr2) { let result = []; for (let i = 0; i arr1[i][index] + arr2[i][index])); } return result; } 문제를 풀면서 막막했던 점을 적어보려고 한다. 1) 배열안의 배열끼리 연산을 할 때는 어떻게 해주어야 하지? 2) 각각 어떻게 더하게 만들지? 우선 기억해야할 점은 배열안에 또 객체나 배열이 들어있는 경우 각각의 요소를 처리해주기 위해서는 map 메서드를 기억하자. 그런데 각각 더하게 만들려면 한 번 더 들어가야한다. 그래서 for문을 같이 병행해서 이용한다. (참고로 이중..

LV 1 - 직사각형 별 찍기

process.stdin.setEncoding("utf8"); process.stdin.on("data", (data) => { const n = data.split(" "); const a = Number(n[0]), b = Number(n[1]); for (let i = 0; i < b; i++) { console.log("*".repeat(a)); } }); 문제를 어떻게 풀어야할지 궁금점이 두 가지가 들었다. 1) 숫자들을 어떻게 *로 바꿀것인가? 2) 어떻게 가로줄 세로줄을 만들어서 직사각형 모양으로 만들 수 있을까? 1번 질문 같은 경우는 아래의 메서드를 활용해서 가로줄을 만들어 주었다. str.repeat(count); 2번 질문 같은 경우는 for문을 이용해서 반복적인 작업을 수행할 수 있..

LV 1 - 정수 제곱근 판별

풀이 function solution(n) { if (Math.sqrt(n) === Math.floor(Math.sqrt(n))) { return (Math.sqrt(n) + 1) ** 2; } else { return -1; } } Math.sqrt()메서드를 이용하여 완전히 딱 정수로 떨어진다면 (Math.floor()메서드 적용한것과 비교) 하나 더한것에서 제곱한 값을 리턴해준다. 아닐 경우 -1을 리턴한다. 다른 스터디원 풀이 function solution(n) { // 입력 : 양의 정수 n // 출력 : 제곱근이 양의 정수이면 제곱근 +1 의 제곱, 아니라면 -1 리턴 // 제곱근 x : 제곱하면 n이 되는 수 // 1. n의 제곱근 root를 구한다. // 2. root가 정수인지 판별하고..

LV1 - 자릿수 더하기

풀이 function solution(n) { let changeToString = n.toString(); let sum = 0; for (let i = 0; i < changeToString.length; i++) { sum = sum + Number(changeToString[i]); } return sum; } 숫자를 문자를 바꿔주고 changeToString이라는 변수에 넣어주었다. 그리고 sum이라는 변수를 선언해주고 초깃값으로 0을 할당해준다. for문을 돌면서 각 문자화된 숫자를 다시 숫자로 변환해주고 sum이라는 변수에 계속 더해나간다.

1 2 3