JavaScript - 프로그래머스 레벨 : 0(17) - ORDER BY '정답률'

먹보·2023년 1월 4일
0

1. 분수의 덧셈

문제 : 첫 번째 분수의 분자와 분모를 뜻하는 denum1, num1, 두 번째 분수의 분자와 분모를 뜻하는 denum2, num2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

function solution(denum1, num1, denum2, num2) {
    // num이 분모 , denum이 분자 "이름 좀 바꿔 주세요.."
    const answer = [];
    const commonDenum = num1 * num2; 
    const sumNum = (num1*denum2) + (num2*denum1);
    const gcf = findGCF(commonDenum, sumNum);
  
    answer.push(sumNum/gcf)
    answer.push(commonDenum/gcf)
    
    return answer;
}

function findGCF (n1,n2) {
  if (n2 == 0){
    return n1
  }
    return n1 > n2 ? findGCF(n2, n1 % n2) : findGCF(n1, n2 % n1);
}

🗒️코멘트 : 풀이 방법

  • 두 가지 방법 존재
    • 공통분모를 최소공배수로 구한 후 더한 다음 기약분수로 변경
    • 공통분모를 그냥 분모의 곱으로 구한 후 더한 다음 기약분수로 변경 (착안)
  • 풀이 순서 : 공통 분모 -> 분자 더하기 -> 기약분수(최대공약수 구하기) -> 배열 내 분자,분모 넣기
  • 여기서 핵심은 최대 공약수를 구하는 것 : 유클리드의 호제법을 적용하여 구함

2. 연속된 수의 합

문제 : 연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.

function solution(num, total) {
    let sum = 0;
    const answer = [];
    for (let i = 0 ; i < num ; i++){
        sum += i;
    }
    for (let j = 0 ; j < num ; j++){
        answer.push((total - sum)/num + j)
    }
    return answer
}

🗒️코멘트 : NULL

3. 안전지대

문제 : 다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.

function solution(board) {
  const N = board.length
  const dx = [-1, 1, 0, 0, -1, -1, 1, 1]
  const dy = [0, 0, -1, 1, -1, 1, -1, 1]

  const locationOne = [];
    for (let i = 0 ; i < N ; i++){
        for (let j = 0 ; j < board[i].length ; j++){
            if(board[i][j] == 1){
              locationOne.push([i,j])
            }
        }
  }


  locationOne.forEach(([x, y]) => {
    for (let i = 0; i < 8; i++) {
      const nx = x + dx[i]
      const ny = y + dy[i]
      if (0 <= nx && nx < N && 0 <= ny && ny < N) {
        board[nx][ny] = 1
      }
    }
  })
  let answer = 0;
  for (let m = 0 ; m < N ; m++){
      for (let n = 0 ; n < board[m].length ; n++){
          if (board[m][n] == 0){
              answer++
          }
      }
  }
    return answer
}

🗒️코멘트 : 접근 방식

  • 어떻게 하면 폭탄 주변이 위험 지대인지 설정하는 것을 고민
  • 위험 지대와 폭탄 위치를 동일 시 함
  • 폭탄이 없는 곳의 갯수 세기
profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글