프로그래머스 | 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의 값을 제곱하면 정사각형의 크기가 나옵니다

결과


참고 한 글

좋은 웹페이지 즐겨찾기