프로그래머스 | Lv.2_연습문제_Part.1_JS
난이도 : Level. 2
언어 : Javascript
출제 내역 : 연습문제
전체 풀이 코드 👈🏻 클릭시 Github로 이동
❓ Question 1
N개의 최소공배수
- 배열의 숫자들에서 최소공배수를 구하자
📝 My Solution 1
이 문제는 유클리드 호제법
을 이용해야 하는 문제라고 합니다.
유클리드 호제법은 최대공약수
를 구하는 공식인데,
최소공배수는 이 최대공약수를 이용해 구하는 공식이 있기에
이 부분에 대해서 알고 가는 것이 좋습니다.
const gcd = (a,b) => {
if (a === 0) return b
return gcd (b%a,a)
}
const lcm = (a, b) => {
return (a * b) / gcd(a, b);
};
gcd
는 최대 공약수를 구하는 방식이고
lcm
은 최소 공배수를 구하는 방식이라
미리 두 함수를 만들어 둡니다.
function solution(arr) {
let answer = 1;
for (let i = 0; i < arr.length; i++) {
answer = lcm(answer, arr[i]);
}
return answer;
}
그 이후 배열을 반복문을 통해 탐색 한 뒤,
결과를 도출합니다.
결과
❓ Question 2
124 나라의 숫자
- 모든 수를 124로 구하는 나라에서 자연수를 변경해보자
📝 My Solution 2
function solution(n) {
var answer = '';
while (n > 0) {
switch (n % 3) {
case 1:
answer = "1" + answer;
n = parseInt(n / 3);
break;
case 2:
answer = "2" + answer;
n = parseInt(n / 3);
break;
case 0:
answer = "4" + answer;
n = n / 3 - 1;
break;
}
}
return answer;
}
switch
case
를 이용했고,
숫자를 3으로 나눈 나머지 값을 이용해 변경 된 숫자 문자열을 구했습니다.
결과
❓ Question 3
가장 큰 정사각형 찾기
- 가장 큰 정사각형의 넓이를 구하자
📝 My Solution 3
function solution(board) {
var answer = 0;
let width = board[0].length;
let height = board.length;
if (width < 2 || height < 2) return 1
먼저 가로와 세로의 길이 값을 변수로 지정해 주고,
배열이 1로 이루어진 값이 있을때를 대비해 해당 부분을 잡아줍니다.
for (let i = 1; i < height; i++) {
for (let l = 1; l < width; l++) {
if (board[i][l]>0) {
let count = Math.min(board[i-1][l],board[i-1][l-1],board[i][l-1])
board[i][l] = count + 1
}
그 다음, 반복문을 통해 배열에 1이 있는지를 찾고,
1이 나오면 위, 왼쪽 대각선, 왼쪽에 1이 있는지를 확인하면서
정사각형의 유무를 파악합니다.
if (answer < board[i][l]) {
answer = board[i][l]
}
}
}
return answer ** 2;
}
그 다음, answer의 값과 현재 배열의 값과 비교해서 더 큰 값을 넣어줍니다.
그 후, 마지막으로 나온 answer의 값을 제곱하면 정사각형의 크기가 나옵니다
결과
참고 한 글
Author And Source
이 문제에 관하여(프로그래머스 | Lv.2_연습문제_Part.1_JS), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sstaar91/Algorithm-Programmers-Practice2-1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)