🍀 코딩 테스트 40

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문을 이용해서 반복적인 작업을 수행할 수 있..

그룹 알고리즘

//문제: 컬렉션 형태의 데이터를 특정 키 값으로 그룹화. // 그룹 알고리즘(Group Algorithm): 특정 키 값에 해당하는 그룹화된 합계 리스트 만들기 //테스트용 레코드 JSON 배열 (function () { //[1] Input: 테스트용 레코드 JSON 배열 let records = [ { Name: "RADIO", Quantity: 3 }, { Name: "TV", Quantity: 1 }, { Name: "RADIO", Quantity: 2 }, { Name: "DVD", Quantity: 4 }, ]; // 입력 데이터 let groups = []; // 출력 데이터 let N = records.length; // 의사코드 //[2] Process: Group 알고리즘 (SORT ..

최빈값 알고리즘

## 최빈값 알고리즘 : 데이터 중에서 가장 많이 나타난 값. 최빈값 알고리즘의 핵심은 배열의 데이터 자체를 index로 보는 것이다. 예를 들어서 let scores = [1, 3, 4, 3, 5]; 이 점수들을 index로 취급하는 것이다. 그래서 1이면 1번째 index 1증가, 3이면 3번째 index에 2가 증가하는 것이다. (3이 두번 나왔기 때문이다.) 그리고 그 값의 최댓값의 대한 index를 찾아내주면 그게 최빈값이다. 정리하자면 데이터를 index로 취급하고 개수 알고리즘을 사용. 그리고 최댓값을 구해주면 그것이 최빈값이 된다. // 문제: 주어진 데이터에서 가장 많이 나타난(중복된) 값 // 최빈값 알고리즘(Mode Algorithm): 점수 인덱스(0 ~ n)의 개수(Count)의 ..

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가 정수인지 판별하고..

1 2 3 4