728x90
반응형

 

문제 1. 머쓱이는 직육면체 모양의 상자를 하나 가지고 있는데 이 상자에 정육면체 모양의 주사위를 최대한 많이 채우고 싶습니다. 상자의 가로, 세로, 높이가 저장되어있는 배열 box와 주사위 모서리의 길이 정수 n이 매개변수로 주어졌을 때, 상자에 들어갈 수 있는 주사위의 최대 개수를 return 하도록 solution 함수를 완성해주세요.

 

function solution(box, n) {
    let answer = 1;
    for(let i=0; i<3; i++){
        answer *= Math.floor(box[i]/n)
    }
    return answer;
}

solution 함수는 box와 n이라는 두 개의 매개변수를 입력으로 받습니다. box는 세 개의 숫자로 이루어진 배열이고, n은 나눌 수입니다.
answer 변수를 1로 초기화합니다. 이 변수는 최종 결과를 담을 변수입니다.
for 루프를 사용하여 box 배열의 각 요소에 대해 연산을 수행합니다. i 변수는 0부터 2까지 반복됩니다.
각 box[i]를 n으로 나눈 몫을 구하고, Math.floor 함수를 사용하여 정수로 변환합니다.
answer 변수에 box[i]를 n으로 나눈 몫을 곱해줍니다. 이렇게 하면 세 개의 결과가 차례대로 곱해집니다.
for 루프가 종료되면 answer 변수에는 세 개의 연산 결과가 모두 곱해진 값이 저장됩니다.
최종적으로 answer 값을 반환합니다.

 

 

 

문제 2. 약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.

 

function solution(n) {
    let answer = 0;
    for(let i=n; i>=1; i--) {
        let isCount = false;
        for(let num =2; num<i-1; num++){
            if(i % num == 0) {
            isCount = true;
        }
    }
    if(isCount){
            answer += 1;
    }
}
    return answer;
}

solution 함수는 n이라는 매개변수를 입력으로 받습니다. n은 양의 정수입니다.
answer 변수를 0으로 초기화합니다. 이 변수는 소수의 개수를 담을 변수입니다.
for 루프를 사용하여 i 변수를 n부터 1까지 감소시킵니다.
isCount 변수를 false로 초기화합니다. 이 변수는 소수 여부를 나타내는 플래그입니다.
두 번째 for 루프를 사용하여 num 변수를 2부터 i - 1까지 반복합니다.
if 문을 사용하여 현재의 i가 num으로 나누어떨어지는지 확인합니다. 나누어떨어지면 isCount 변수를 true로 설정합니다.
isCount 변수가 true인 경우, 즉 i가 어떤 숫자로 나누어떨어진 경우, 소수가 아니므로 answer 변수를 1 증가시킵니다.
내부 for 루프가 종료되면, 현재의 i에 대한 소수 여부가 결정됩니다.
외부 for 루프가 종료되면, n 이하의 모든 숫자에 대한 소수 여부가 확인되고, answer 변수에 소수의 개수가 저장됩니다.
최종적으로 answer 값을 반환합니다.

 

 

 

 

문제 3. 정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.

 

function solution(numbers) {
    const sortedNumbers = numbers.sort((a,b)=>b-a);
    return sortedNumbers[0] * sortedNumbers[1];
}

solution 함수는 numbers라는 매개변수를 입력으로 받습니다. 

이 매개변수는 숫자 배열입니다.


sortedNumbers라는 변수에 numbers 배열을 내림차순으로 정렬한 결과를 저장합니다. 

sort 메서드는 비교 함수 (a, b) => b - a를 사용하여 정렬합니다. 

이 비교 함수는 a와 b를 비교하여 b - a의 결과가 양수이면 b가 a보다 큰 것으로 판단하여 정렬합니다.


정렬된 sortedNumbers 배열의 첫 번째 원소와 두 번째 원소를 곱한 결과를 반환합니다.


이 함수는 입력된 숫자 배열에서 가장 큰 두 수를 선택하여 곱한 값을 반환합니다.

sort 메서드를 사용하여 배열을 내림차순으로 정렬하므로, sortedNumbers 배열의 첫 번째 원소는 가장 큰 수이고, 두 번째 원소는 그 다음으로 큰 수입니다.

이 두 수를 곱한 결과를 반환합니다.

 

 

 

 

문제 4. i 팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 * 4 * 3 * 2 * 1 = 120 입니다. 정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.

 

const getFactorial = (i) => {
    let result = 1;
    for(let j = 1; j<=i; j++) {
        result *= j;
    }
    return result;
}
function solution(n) {
    var answer = 0;
    
    for(let i=1; ; i++){
     const result = getFactorial(i);
        if(n<result){
            return i - 1;
        }
    }
}

getFactorial 함수는 i라는 매개변수를 입력으로 받습니다. 

이 매개변수는 팩토리얼을 계산할 숫자입니다.

result라는 변수에 1로 초기화합니다.

for 루프를 사용하여 j를 1부터 i까지 증가시키며 result에 j를 곱해 나갑니다. 

이렇게 하면 result에는 i의 팩토리얼 값이 저장됩니다.

result를 반환합니다.

solution 함수는 n이라는 매개변수를 입력으로 받습니다. 이 매개변수는 숫자입니다.

answer라는 변수를 0으로 초기화합니다.

무한루프를 돌면서 i를 1부터 증가시키며 다음을 수행합니다.

getFactorial(i)를 호출하여 i의 팩토리얼 값을 구합니다.

만약 n이 result보다 작다면, 현재 i에서 1을 빼고 반환합니다. 

이는 n보다 작은 팩토리얼 값들 중 가장 큰 값의 인덱스를 나타냅니다.

이 함수는 주어진 숫자 n보다 작은 팩토리얼 값들 중 가장 큰 값의 인덱스를 반환합니다. 

getFactorial 함수를 사용하여 각 i의 팩토리얼 값을 계산하고, n과 비교하여 n보다 작을 때까지 반복합니다. 

n보다 작아지는 순간의 i에서 1을 빼고 반환하여 가장 큰 값의 인덱스를 구합니다.

728x90
반응형

문제 1.

사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다.

x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.


x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.

function solution(dot) {
  const x = dot[0];
  const y = dot[1];

  if (x > 0 && y > 0) {
    return 1;
  } else if (x < 0 && y > 0) {
    return 2;
  } else if (x < 0 && y < 0) {
    return 3;
  } else if (x > 0 && y < 0) {
    return 4;
  }
}

solution 함수는 dot라는 매개변수를 입력으로 받습니다. 이는 좌표 평면상의 점을 의미하는 배열입니다.
dot 배열의 첫 번째 요소를 x 변수에 할당합니다. 이는 점의 x 좌표를 나타냅니다.
dot 배열의 두 번째 요소를 y 변수에 할당합니다. 이는 점의 y 좌표를 나타냅니다.
조건문을 사용하여 좌표를 판별합니다.
만약 x가 양수이고 y가 양수인 경우, 이는 제 1사분면에 속하는 점입니다. 따라서 1을 반환합니다.
만약 x가 음수이고 y가 양수인 경우, 이는 제 2사분면에 속하는 점입니다. 따라서 2를 반환합니다.
만약 x가 음수이고 y가 음수인 경우, 이는 제 3사분면에 속하는 점입니다. 따라서 3을 반환합니다.
만약 x가 양수이고 y가 음수인 경우, 이는 제 4사분면에 속하는 점입니다. 따라서 4를 반환합니다.

 

 

문제 2. 정수 배열 num_list와 정수 n이 매개변수로 주어집니다. num_list를 다음 설명과 같이 2차원 배열로 바꿔 return하도록 solution 함수를 완성해주세요.

num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 num_list를 2 * 4 배열로 다음과 같이 변경합니다. 2차원으로 바꿀 때에는 num_list의 원소들을 앞에서부터 n개씩 나눠 2차원 배열로 변경합니다.

function solution(num_list, n) {
  const result = [];
  
  for (let i = 0; i < num_list.length; i += n) {
    const chunk = num_list.slice(i, i + n);
    result.push(chunk);
  }
  
  return result;
}

solution 함수는 num_list와 n이라는 두 개의 매개변수를 입력으로 받습니다. num_list는 숫자로 이루어진 배열이고, n은 나눌 크기를 나타냅니다.
result라는 빈 배열을 생성합니다. 이 배열은 결과로 반환할 2차원 배열입니다.
for 반복문을 사용하여 배열을 n 크기로 나눕니다. 반복문의 초기값 i는 0부터 시작하고, i를 n만큼 증가시킵니다.
num_list 배열의 i부터 i + n - 1까지의 요소를 추출하여 chunk라는 배열을 생성합니다. 이는 현재 나눈 부분 배열입니다.
result 배열에 chunk 배열을 추가합니다.
반복문이 종료되면 result 배열을 반환합니다. 이는 원래 배열을 n 크기로 나눈 2차원 배열입니다.

 

 

문제 3. 머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.

function solution(numbers, k) {
    let cnt = 1;
    for(let i = 0; ;i+=2){
      i %= numbers.length;
     const item = numbers[i];
        if(cnt === k ) {
            return item;
        }
        cnt+=1;
    }
}

solution 함수는 numbers와 k라는 두 개의 매개변수를 입력으로 받습니다. numbers는 숫자로 이루어진 배열이고, k는 선택할 요소의 위치를 나타냅니다.
cnt라는 변수를 1로 초기화합니다. 이 변수는 현재까지 선택한 요소의 개수를 나타냅니다.
for 반복문을 사용하여 배열의 요소를 선택합니다. 반복문의 초기값 i는 0부터 시작하고, 2씩 증가합니다.
i를 배열의 길이로 나눈 나머지를 구합니다. 이는 배열의 인덱스 범위를 벗어나지 않도록 합니다.
numbers 배열에서 i 위치의 요소를 item 변수에 저장합니다.
cnt가 k와 같아지면 선택한 요소를 반환합니다.
cnt를 1씩 증가시킵니다.
반복문이 종료되지 않고 계속 실행되도록 조건식을 비워둡니다.

 

 

문제 4. 정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.

function solution(numbers, direction) {
    const answer = [];
    if(direction === 'right'){
        answer.push(numbers[numbers.length - 1]);
        for(let i=0; i<numbers.length-1; i++){
                answer.push(numbers[i]);
            }
        } else {
            for(let i=1; i<numbers.length; i++) {
                answer.push(numbers[i]);
            }
            answer.push(numbers[0]);
        }
        return answer;
    }

solution 함수는 numbers와 direction라는 두 개의 매개변수를 입력으로 받습니다. numbers는 숫자로 이루어진 배열이고, direction은 회전 방향을 나타냅니다.
answer라는 빈 배열을 선언합니다. 결과로 반환할 회전된 배열입니다.
만약 direction이 'right'인 경우, 오른쪽으로 회전시키는 로직을 수행합니다.
numbers 배열의 마지막 요소를 answer 배열에 추가합니다.
numbers 배열의 첫 번째부터 마지막 이전 요소까지를 answer 배열에 순서대로 추가합니다.
그렇지 않은 경우, 왼쪽으로 회전시키는 로직을 수행합니다.
numbers 배열의 두 번째부터 마지막 요소까지를 answer 배열에 순서대로 추가합니다.
numbers 배열의 첫 번째 요소를 answer 배열에 추가합니다.
최종적으로 answer 배열을 반환합니다.

728x90
반응형

 

 

문제 1. 개미 군단이 사냥을 나가려고 합니다. 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 사냥감의 체력 hp가 매개변수로 주어질 때, 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요.

function solution(hp) {
  let antCount = 0;
  
  // 장군개미, 병정개미, 일개미 중 최대한 많은 개미로 체력을 감소시킴
  while (hp > 0) {
    if (hp >= 5) {
      antCount += Math.floor(hp / 5);  // 장군개미의 개수를 추가
      hp = hp % 5;  // 남은 체력 계산
    } else if (hp >= 3) {
      antCount += Math.floor(hp / 3);  // 병정개미의 개수를 추가
      hp = hp % 3;
    } else {
      antCount += hp;  // 일개미의 개수를 추가
      hp = 0;
    }
  }
  
  return antCount;
}

solution 함수는 hp라는 매개변수를 입력으로 받습니다. 

이는 체력을 나타내는 값입니다.


antCount 변수는 사용한 개미의 총 개수를 담을 변수입니다. 

초기 값으로 0을 설정합니다.


while 반복문을 사용하여 체력(hp)이 0보다 클 때까지 반복합니다.


체력(hp)이 5 이상인 경우, 장군개미를 사용하여 체력을 감소시킵니다.


hp를 5로 나눈 몫을 antCount에 추가합니다. 이는 장군개미의 개수를 의미합니다.


남은 체력을 계산하기 위해 hp를 5로 나눈 나머지를 할당합니다.


체력(hp)이 3 이상인 경우, 병정개미를 사용하여 체력을 감소시킵니다.


hp를 3으로 나눈 몫을 antCount에 추가합니다. 이는 병정개미의 개수를 의미합니다.


남은 체력을 계산하기 위해 hp를 3으로 나눈 나머지를 할당합니다.


체력(hp)이 3 미만인 경우, 일개미를 사용하여 체력을 감소시킵니다.


hp 값을 antCount에 추가합니다. 이는 일개미의 개수를 의미합니다.


체력(hp)를 0으로 설정하여 루프를 종료합니다.


반복문을 통해 체력이 0이 될 때까지 위의 과정을 수행합니다.


마지막으로 사용한 개미의 총 개수인 antCount 값을 반환합니다.

 

 

 

문제 2. 머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter가 매개변수로 주어질 때, letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.

function solution(letter) {
  const morse = { 
    '.-': 'a', '-...': 'b', '-.-.': 'c', '-..': 'd', '.': 'e', '..-.': 'f',
    '--.': 'g', '....': 'h', '..': 'i', '.---': 'j', '-.-': 'k', '.-..': 'l',
    '--': 'm', '-.': 'n', '---': 'o', '.--.': 'p', '--.-': 'q', '.-.': 'r',
    '...': 's', '-': 't', '..-': 'u', '...-': 'v', '.--': 'w', '-..-': 'x',
    '-.--': 'y', '--..': 'z'
  };
  
  const words = letter.split(' ');
  let result = '';
  
  for (let i = 0; i < words.length; i++) {
    const word = words[i];
    const translatedWord = morse[word];
    result += translatedWord;
  }
  
  return result;
}

solution 함수는 letter라는 매개변수를 입력으로 받습니다. 이는 모스 부호 문자열을 의미합니다.
morse 객체는 몰스 부호와 해당하는 알파벳을 매핑한 객체입니다.
words 변수는 입력된 몰스 부호 문자열을 공백을 기준으로 나눈 배열입니다.
result 변수는 변환된 알파벳을 저장할 문자열로 초기값은 빈 문자열입니다.
for 반복문을 사용하여 words 배열을 순회합니다.
각각의 몰스 부호(word)를 가져와서 morse 객체에서 해당하는 알파벳을 찾습니다.
찾은 알파벳을 translatedWord 변수에 할당합니다.
result에 translatedWord를 추가합니다.
모든 몰스 부호에 대해 위의 과정을 반복합니다.
반복문이 종료되면 변환된 알파벳이 저장된 result를 반환합니다.

 

 

 

문제 3. 가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp가 매개변수로 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.

function solution(rsp) {
 let answer = '';
    for(let i of rsp) {
        if(i == 0){
            answer += '5'
        } else if (i == 2) {
            answer += '0'
        } else if(i == 5) {
            answer +='2'
        }
    }
 return answer;
}

 

 

 

 

문제 4. 머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.

function solution(balls, share) {
  let allBalls = Array.from({ length: balls }, (_, index) => index + 1).reduce(
    (a, b) => {
      return a * b;
    },
    1
  );

  let ballMinusShare = Array.from(
    { length: balls - share },
    (_, index) => index + 1
  ).reduce((a, b) => {
    return a * b;
  }, 1);

  let allShare = Array.from({ length: share }, (_, index) => index + 1).reduce(
    (a, b) => {
      return a * b;
    },
    1
  );

  return Math.round(allBalls / (ballMinusShare * allShare));
}

먼저, allBalls 변수는 1부터 balls까지의 수를 곱한 값을 계산하여 저장한다.

이는 주어진 구슬들 중 어떤 구슬이 선택되어야 하는지 고려하지 않고, 모든 구슬의 경우의 수를 나타낸다.

다음으로, ballMinusShare 변수는 balls - share까지의 수를 곱한 값을 계산하여 저장한다.

이는 주어진 구슬들 중 나누어 주지 않아도 되는 구슬들의 경우의 수를 나타낸다.

즉, 친구들에게 나누어 주어야 하는 구슬의 개수를 제외한 나머지 구슬의 경우의 수이다.

마지막으로, allShare 변수는 1부터 share까지의 수를 곱한 값을 계산하여 저장한다. 

이는 친구들에게 나누어 주어야 하는 구슬의 개수에 대한 경우의 수를 나타낸다.

 allBalls을 ballMinusShare와 allShare의 곱으로 나누어서 가능한 모든 경우의 수를 구한다.

이 값은 소수점 이하를 버린 결과로 반환된다.

소수점 이하의 값은 나누어 떨어지지 않는 경우에 발생할 수 있으므로, Math.round 함수를 사용하여 반올림 처리를 한다.

728x90
반응형

문제 1. 정수 배열 numbers와 정수 num1num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.

function solution(numbers, num1, num2) {
  let answer = numbers.slice(num1, num2 + 1);
  return answer;
}

solution 함수는 numbers, num1, num2라는 매개변수를 입력으로 받습니다.
numbers는 원본 배열이며, num1은 시작 인덱스, num2는 종료 인덱스를 나타냅니다.
answer는 numbers 배열의 num1부터 num2까지의 부분 배열을 추출하여 저장합니다. slice 메소드를 사용하여 해당 부분 배열을 생성합니다. num1은 시작 인덱스이므로 포함되고, num2는 종료 인덱스이므로 포함됩니다.
추출된 부분 배열을 answer에 할당합니다.
최종적으로 answer를 반환하여 함수의 결과로 출력됩니다.

 

문제 2. 우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.

function solution(age) {
  let result = '';

  while (age > 0) {
    const remainder = age % 10; // 나이의 일의 자리 수
    result = String.fromCharCode(97 + remainder) + result; // 알파벳으로 변환하여 결과에 추가
    age = Math.floor(age / 10); // 나이를 10으로 나눈 몫으로 갱신
  }

  return result;
}

solution 함수는 age라는 매개변수를 입력으로 받습니다.
result는 최종 변환 결과를 저장할 변수입니다.
while 반복문을 사용하여 age가 0보다 큰 동안 반복합니다.
remainder 변수에 age를 10으로 나눈 나머지 값을 저장합니다. 이는 age의 일의 자리 숫자를 나타냅니다.
String.fromCharCode(97 + remainder)를 사용하여 remainder에 해당하는 알파벳 문자를 생성합니다. 97은 소문자 알파벳 'a'의 유니코드 값입니다. 따라서 remainder의 값에 97을 더하면 해당 알파벳의 유니코드 값이 됩니다.
알파벳 문자열을 결과(result)의 앞쪽에 추가하기 위해 result 변수의 값을 String.fromCharCode(97 + remainder)와 결합합니다.
age를 10으로 나눈 몫을 새로운 age 값으로 갱신합니다. 이는 age의 일의 자리 숫자를 제거하는 역할을 합니다.
age가 0보다 큰 동안 위의 과정을 반복합니다.
반복이 종료되면 result를 반환하여 함수의 결과로 출력됩니다.

 

 

 

문제 3. 외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.

function solution(emergency) {
  let answer = new Array(emergency.length).fill(1);
  for (let i = 0; i < emergency.length; i++) {
    emergency.map((v) => {
      if (emergency[i] < v) answer[i]++;
    });
  }
  return answer;
}

solution 함수는 emergency라는 매개변수를 입력으로 받습니다. 이는 응급 상황에 대한 정보가 담긴 배열입니다.
answer 변수는 응급 상황의 우선순위를 담을 배열입니다. 

초기 값으로 emergency.length 길이의 배열을 생성하고 1로 채웁니다.
for 반복문을 사용하여 emergency 배열의 각 요소를 순회합니다.
내부에 있는 emergency.map 메서드는 emergency 배열을 순회하면서 현재 요소보다 큰 값이 있는지 확인합니다.
만약 현재 요소(emergency[i])보다 큰 값(v)이 있다면, 해당 우선순위(answer[i])를 1 증가시킵니다.
반복문을 통해 모든 요소에 대해 위의 과정을 수행합니다.
마지막으로 우선순위(answer) 배열을 반환합니다.

 

 

 

 

문제 4. 순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.

function solution(n) {
  let answer = 0;
  
  // 숫자 i를 1부터 n까지 증가시키면서 두 숫자의 곱이 n인 경우를 찾음
  for (let i = 1; i <= n; i++) {
    if (n % i === 0) {
      answer++;
    }
  }
  
  return answer;
}

solution 함수는 n이라는 매개변수를 입력으로 받습니다. 이는 약수를 구할 숫자입니다.
answer 변수는 약수의 개수를 담을 변수입니다. 초기 값으로 0을 설정합니다.
for 반복문을 사용하여 1부터 n까지의 숫자를 증가시키면서 약수를 찾습니다.
if 문을 사용하여 n을 현재 숫자 i로 나눈 나머지가 0인 경우를 찾습니다. 즉, i가 n의 약수인 경우입니다.
약수를 찾았을 때마다 answer 변수를 1 증가시킵니다.
반복문을 통해 모든 숫자에 대해 위의 과정을 수행합니다.
마지막으로 약수의 개수인 answer 값을 반환합니다.

728x90
반응형

 

문제 1. 문자열 my_string과 문자 letter이 매개변수로 주어집니다. my_string에서 letter를 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

function solution(my_string, letter) {
  let answer = '';

  for (let i = 0; i < my_string.length; i++) {
    if (my_string[i] !== letter) {
      answer += my_string[i];
    }
  }

  return answer;
}

solution 함수는 my_string이라는 문자열과 letter라는 문자를 입력받습니다.
answer 변수를 선언하고 빈 문자열로 초기화합니다. 이 변수는 결과로 반환할 새로운 문자열입니다.
for 루프에서는 my_string의 각 문자에 접근합니다.
조건문 if를 사용하여 현재 문자가 letter와 다른 경우에만 실행합니다.
my_string[i]와 letter가 다른 경우에는 현재 문자를 answer에 추가합니다.
이렇게 하면 letter와 일치하지 않는 문자만 answer에 추가되게 됩니다.
모든 문자에 대해 위 과정을 반복하면, answer에는 letter가 제거된 문자열이 저장됩니다.
최종적으로 answer를 반환하여 함수의 결과로 출력됩니다.

 

 

문제 2. 각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요.

function solution(angle) {
  if (angle > 0 && angle < 90) {
    return 1; // 예각
  } else if (angle === 90) {
    return 2; // 직각
  } else if (angle > 90 && angle < 180) {
    return 3; // 둔각
  } else if (angle === 180) {
    return 4; // 평각
  }
}

 

 

문제 3. 머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 n과 k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요.

function solution(n, k) {
  const yakitoriPrice = 12000; // 양꼬치 가격
  const drinkPrice = 2000; // 음료수 가격

  const totalYakitoriPrice = n * yakitoriPrice; // 양꼬치 총 가격
  const freeDrinks = Math.floor(n / 10); // 무료 음료수 개수
  const totalDrinkPrice = (k - freeDrinks) * drinkPrice; // 음료수 총 가격 (무료 음료수를 제외한 개수에 대한 가격)

  const totalPrice = totalYakitoriPrice + totalDrinkPrice; // 총 결제 금액

  return totalPrice;
}

solution 함수는 n과 k라는 매개변수를 입력으로 받습니다.
yakitoriPrice는 양꼬치 1개의 가격을 나타내는 상수입니다. 여기서는 12000으로 설정되어 있습니다.
drinkPrice는 음료수 1개의 가격을 나타내는 상수입니다. 여기서는 2000으로 설정되어 있습니다.
totalYakitoriPrice는 주어진 양꼬치 개수 n과 yakitoriPrice를 곱하여 양꼬치 총 가격을 계산합니다.
freeDrinks는 양꼬치 10개당 1개의 무료 음료수가 제공되므로, n을 10으로 나눈 몫을 계산하여 무료 음료수 개수를 구합니다.
totalDrinkPrice는 주어진 음료수 개수 k에서 무료 음료수 개수 freeDrinks를 제외하고 남은 개수에 drinkPrice를 곱하여 음료수 총 가격을 계산합니다.
totalPrice는 양꼬치 총 가격과 음료수 총 가격을 합하여 총 결제 금액을 계산합니다.
최종적으로 totalPrice를 반환하여 함수의 결과로 출력됩니다.

 

 

문제 4. 정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.

function solution(n) {
    let answer = 0;
    
    for(let i=0; i<=n; i++) {
        if(i % 2 == 0) {
            answer = answer + i;
        } 
    }
    return answer;
}

 

728x90
반응형

 

문제 1. 문자열 my_string이 매개변수로 주어집니다. my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.

function solution(my_string) {
    let answer = '';
    for (let i = my_string.length - 1; i >= 0; i--) {
        answer += my_string[i];
    }
    return answer;
}

solution 함수는 my_string이라는 인자를 받습니다. 이 인자는 뒤집고자 하는 문자열입니다.
answer 변수는 빈 문자열로 초기화됩니다. 이 변수에 뒤집힌 문자열을 저장할 것입니다.
for 루프를 사용하여 my_string의 뒤에서부터 문자를 하나씩 가져옵니다.
i 변수는 my_string의 길이에서 1을 뺀 값부터 시작하여 0까지 감소합니다. 이렇게 함으로써 문자열을 역순으로 순회합니다.
각 문자를 answer 변수에 추가합니다. my_string[i]는 my_string의 인덱스 i에 해당하는 문자를 의미합니다. 따라서 my_string을 역순으로 순회하며 answer에 문자를 추가하게 됩니다.
최종적으로 answer 변수에 저장된 뒤집힌 문자열을 반환합니다.

 

 

문제 2. "*"의 높이와 너비를 1이라고 했을 때, "*"을 이용해 직각 이등변 삼각형을 그리려고합니다. 정수 n 이 주어지면 높이와 너비가 n 인 직각 이등변 삼각형을 출력하도록 코드를 작성해보세요.

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let input = [];

rl.on('line', function (line) {
    input = line.split(' ');
}).on('close', function () {
    const n = Number(input[0]);
    for (let i = 1; i <= n; i++) {
        let row = '';
        for (let j = 1; j <= i; j++) {
            row += '*';
        }
        console.log(row);
    }
});

readline 모듈을 사용하여 사용자로부터 입력을 받아오기 위한 준비를 합니다.
rl 객체를 생성하여 input과 output 스트림을 설정합니다. 이를 통해 사용자 입력을 받고 출력할 수 있습니다.
빈 배열 input을 선언합니다. 이 배열은 사용자 입력을 저장할 것입니다.
rl 객체의 line 이벤트 리스너를 등록합니다. 이벤트는 사용자가 한 줄을 입력할 때마다 발생합니다.
입력받은 한 줄의 문자열을 공백을 기준으로 나누어 input 배열에 저장합니다.
rl 객체의 close 이벤트 리스너를 등록합니다. 이벤트는 사용자 입력이 끝나고 입력 스트림이 닫힐 때 발생합니다.
input[0] 값을 가져와서 숫자로 변환한 후 n 변수에 저장합니다. 이 값은 출력할 삼각형의 높이를 나타냅니다.
for 루프를 사용하여 1부터 n까지 반복합니다. i는 현재 행의 번호를 나타냅니다.
row 변수를 선언하고 초기값을 빈 문자열로 설정합니다. 이 변수에 현재 행에서 출력할 별(*)을 저장할 것입니다.
두 번째 for 루프를 사용하여 1부터 i까지 반복합니다. j는 현재 행에서 출력할 별(*)의 개수를 나타냅니다.
row 변수에 별(*)을 추가합니다.
현재 행의 별(*) 패턴이 완성되면 row를 출력합니다.
n까지의 모든 행에 대해 반복하면 삼각형 모양의 별(*) 패턴이 출력됩니다.

 

결과적으로 높이와 너비가 n인 직각 이등변 삼각형을 출력합니다.

더보기

* 

** 

***

**** 

*****

 

 

 

문제 3. 정수가 담긴 리스트 num_list가 주어질 때, num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록 solution 함수를 완성해보세요.

function solution(num_list) {
    let answer = [0, 0]; // 짝수 개수와 홀수 개수를 담을 배열 초기화

    for (let i = 0; i < num_list.length; i++) {
        if (num_list[i] % 2 === 0) {
            answer[0]++; // 짝수인 경우 짝수 개수 증가
        } else {
            answer[1]++; // 홀수인 경우 홀수 개수 증가
        }
    }

    return answer;
}

solution 함수는 num_list라는 숫자 배열을 입력받습니다.
answer 변수를 선언하고 [0, 0]으로 초기화합니다. 이 변수는 짝수 개수와 홀수 개수를 담을 배열입니다.
for 루프를 사용하여 num_list의 각 요소에 접근합니다.
현재 요소가 짝수인지 확인하기 위해 num_list[i] % 2 === 0 조건을 사용합니다. % 연산자는 나머지를 구하는 연산자이며, num_list[i]를 2로 나눈 나머지가 0이면 짝수입니다.
만약 현재 요소가 짝수라면, answer[0]을 증가시킵니다. 이는 짝수 개수를 나타내는 배열의 첫 번째 요소입니다.
현재 요소가 홀수인 경우, answer[1]을 증가시킵니다. 이는 홀수 개수를 나타내는 배열의 두 번째 요소입니다.
모든 요소에 대해 반복하면 짝수 개수와 홀수 개수가 answer 배열에 저장됩니다.
최종적으로 answer 배열을 반환하여 함수의 결과로 출력됩니다.

 

 

문제 4. 문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string에 들어있는 각 문자를 n만큼 반복한 문자열을 return 하도록 solution 함수를 완성해보세요.

function solution(my_string, n) {
    let answer = '';

    for (let i = 0; i < my_string.length; i++) {
        for (let j = 0; j < n; j++) {
            answer += my_string[i];
        }
    }

    return answer;
}

solution 함수는 my_string이라는 문자열과 n이라는 숫자를 입력받습니다.
answer 변수를 선언하고 빈 문자열로 초기화합니다. 이 변수는 결과로 반환할 새로운 문자열입니다.
첫 번째 for 루프에서는 my_string의 각 문자에 접근합니다.
두 번째 for 루프에서는 n번만큼 현재 문자를 answer에 추가합니다.
j가 0부터 n-1까지 반복하면서 my_string[i]를 answer에 추가합니다.
이렇게 하면 현재 문자를 n번 반복하여 answer에 추가하는 효과를 얻을 수 있습니다.
모든 문자에 대해 위 과정을 반복하면, answer에는 문자열이 반복된 결과가 저장됩니다.
최종적으로 answer를 반환하여 함수의 결과로 출력됩니다.

728x90
반응형

 

문제 1. 머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다.
구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.

function solution(price) {
  let answer = 0;
  let discountRate = 0;
  
  if (price >= 500000) {
    discountRate = 0.2; // 50만 원 이상일 때 20% 할인
  } else if (price >= 300000) {
    discountRate = 0.1; // 30만 원 이상일 때 10% 할인
  } else if (price >= 100000) {
    discountRate = 0.05; // 10만 원 이상일 때 5% 할인
  }
  
  answer = Math.floor(price - (price * discountRate));
  return answer;
}

입력받은 가격 price를 기준으로 할인율 discountRate를 계산합니다. 조건문을 사용하여 price가 일정 금액 이상인 경우에 해당하는 할인율을 적용합니다. 할인율을 적용한 후, 할인된 가격을 answer 변수에 저장하고 반환합니다.

또한 소수점 이하는 버려야 하기 때문에 Math.floor을 사용합니다.

 

 

문제 2. 머쓱이는 추운 날에도 아이스 아메리카노만 마십니다. 아이스 아메리카노는 한잔에 5,500원입니다. 머쓱이가 가지고 있는 돈 money가 매개변수로 주어질 때, 머쓱이가 최대로 마실 수 있는 아메리카노의 잔 수와 남는 돈을 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

function solution(money) {
  let answer = [];
  const americanoPrice = 5500;
  let maxCups = Math.floor(money / americanoPrice); // 최대로 마실 수 있는 아메리카노의 잔 수
  let remainingMoney = money - (maxCups * americanoPrice); // 남는 돈
  
  answer.push(maxCups);
  answer.push(remainingMoney);
  
  return answer;
}

아메리카노 한 잔의 가격을 americanoPrice 변수에 저장하고, 최대로 마실 수 있는 아메리카노의 잔 수와 남는 돈을 계산하여 배열 answer에 순서대로 담습니다. Math.floor 함수를 사용하여 정수로 최대 잔 수를 구합니다.

 

 

문제 3. 머쓱이는 40살인 선생님이 몇 년도에 태어났는지 궁금해졌습니다. 나이 age가 주어질 때, 2022년을 기준 출생 연도를 return 하는 solution 함수를 완성해주세요.

function solution(age) {
  let answer = 2022 - age + 1; // 2022년을 기준으로 출생 연도 계산
  return answer;
}

주어진 나이 age를 이용하여 2022년을 기준으로 출생 연도를 계산합니다. 주어진 나이에서 1을 빼고 2022를 더하면 출생 연도가 됩니다.

 

 

 

문제 4. 정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요. 

function solution(num_list) {
  let answer = num_list.reverse(); // 배열의 순서를 거꾸로 뒤집음
  return answer;
}

reverse 메서드를 사용하여 주어진 배열 num_list의 순서를 거꾸로 뒤집습니다. 뒤집어진 배열을 answer 변수에 저장하고 반환합니다.

reverse() :

이 메서드는 배열의 순서를 거꾸로 뒤집습니다. 이 메서드는 원본 배열을 직접 변경하며, 뒤집힌 배열을 반환합니다.

728x90
반응형

 

문제 1. 머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는 solution 함수를 완성해보세요.

function solution(n) {
  let answer = Math.ceil(n / 7);
  return answer;
}

solution 함수는 n을 7로 나눈 몫을 올림한 값으로 계산하여, 필요한 피자의 수를 구합니다. 이를 answer 변수에 저장하고 반환합니다.

 

 

문제 2. 머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

function solution(n) {
  for (let i = 1; i<=n; i++) {
    if ((i * 6) % n === 0) {
      return i;
    }
  }
}

반복문에서 i는 피자 판의 수를 나타냅니다. i를 1부터 n까지 증가시키면서, (i * 6) % n을 계산하여 n명에게 피자 조각을 나누어줄 수 있는지 확인합니다. 만약 (i * 6) % n의 결과가 0이라면, i는 n명에게 피자 조각을 나누어줄 수 있는 판의 수입니다. 따라서 해당 i를 반환하고 함수를 종료합니다.

i를 1부터 n까지 증가시키기 때문에, 처음으로 (i * 6) % n이 0이 되는 i는 n명에게 피자 조각을 나누어줄 수 있는 최소한의 판의 수입니다.
(i * 6) % n의 결과가 0이 되는 조건은 i * 6이 n의 배수임을 의미합니다. 

즉, i가 n의 배수일 때 n명에게 피자 조각을 나누어줄 수 있습니다.
i가 n의 배수일 때 n명에게 피자 조각을 나누어주므로, i는 n명이 모두 같은 수의 피자 조각을 먹을 수 있는 최소한의 판의 수입니다.

 

문제 3. 머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

function solution(slice, n) {
  return Math.ceil(n / slice);
}

slice로 나눈 몫을 올림하여 n명이 최소 한 조각 이상씩 피자를 먹을 수 있는 피자 판의 수를 반환합니다.

 

 

문제 4. 정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.

function solution(numbers) {
  let sum = 0;
  for (let i = 0; i < numbers.length; i++) {
    sum += numbers[i];
  }
  return sum / numbers.length;
}

반복문을 사용하여 배열 numbers의 모든 원소를 더한 후, 배열의 길이로 나누어 평균값을 계산합니다. 계산된 평균값을 반환합니다.

728x90
반응형

DAY 3. 

 

문제 1. 정수 num1num2가 매개변수로 주어질 때, num1를 num2로 나눈 나머지를 return 하도록 solution 함수를 완성해주세요.

A :

function solution(num1, num2) {
    let answer = 0;
    answer = num1 % num2 
    return answer;
}

% 는 나머지를 구하는 연산자임.

 

 

문제 2. 중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.

A :

function solution(array) {
  array.sort((a, b) => a - b); // 주어진 배열을 오름차순으로 정렬
  const answer = Math.floor(array.length / 2); // 중앙 인덱스 계산

  return array[answer]; // 중앙값 반환
}

 

sort()

: JavaScript 배열의 내장 메소드로, 배열의 요소들을 정렬하는 데 사용됩니다. sort() 메소드는 원본 배열을 직접 변경하며, 변경된 배열을 반환한다.

기본적으로 sort() 메소드는 배열의 요소를 유니코드 문자열 순서로 정렬한다.

이때, 각 요소는 문자열로 변환되어 비교됩니다. 예를 들어, [3, 1, 2]라는 배열을 sort()로 정렬하면 [1, 2, 3]이 되며, 원본 배열인 [3, 1, 2]도 변경된다.

정렬 순서를 변경하거나 사용자 정의 정렬 기준을 적용하려면 비교 함수를 제공해야 한다. 

비교 함수는 선택적으로 sort() 메소드의 인자로 전달할 수 있다.

비교 함수는 두 개의 인자를 받아서 비교한 결과를 반환해야 합니다. 반환 값에 따라 요소들이 정렬된다. 예를 들어, 오름차순으로 정렬하려면 (a, b) => a - b와 같은 비교 함수를 사용할 수 있다.

 

 

문제 3. 최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

function solution(array) {
  let countMap = new Map(); // 숫자의 등장 횟수를 저장할 맵

  // 배열의 요소들을 순회하며 등장 횟수를 카운트
  for (let num of array) {
    if (countMap.has(num)) {
      countMap.set(num, countMap.get(num) + 1); // 이미 등장한 숫자라면 등장 횟수 증가
    } else {
      countMap.set(num, 1); // 처음 등장하는 숫자라면 등장 횟수 1로 설정
    }
  }

  let maxCount = 0; // 가장 큰 등장 횟수
  let mode = []; // 최빈값을 저장할 배열

  // 맵을 순회하며 최빈값을 찾음
  for (let [num, count] of countMap) {
    if (count > maxCount) {
      maxCount = count;
      mode = [num];
    } else if (count === maxCount) {
      mode.push(num); // 최빈값이 여러 개인 경우 배열에 추가
    }
  }

  return mode.length > 1 ? -1 : mode[0]; // 최빈값이 여러 개면 -1, 그렇지 않으면 최빈값 반환
}

 

먼저, 주어진 배열 array를 순회하며 각 숫자의 등장 횟수를 카운트하기 위해 countMap이라는 Map 객체를 사용.

countMap은 숫자를 키(key)로 가지고, 해당 숫자의 등장 횟수를 값(value)로 가지게 된다.

배열 array를 순회하며 각 숫자에 대해 다음과 같은 작업을 수행합니다:

만약 countMap에 해당 숫자가 이미 존재한다면, 해당 숫자의 등장 횟수를 1 증가시킨다.
만약 countMap에 해당 숫자가 존재하지 않는다면, 해당 숫자를 새로운 키로 추가하고 등장 횟수를 1로 설정한다.
등장 횟수를 카운트한 후, 가장 큰 등장 횟수를 갖는 값(최빈값)을 찾기 위해 countMap을 순회한다. 순회하면서 다음과 같은 작업을 수행한다.

만약 현재 숫자의 등장 횟수가 maxCount(현재까지 확인한 최대 등장 횟수)보다 크다면, maxCount를 현재 숫자의 등장 횟수로 업데이트하고, mode 배열을 현재 숫자로 초기화한다.
만약 현재 숫자의 등장 횟수가 maxCount와 같다면, mode 배열에 현재 숫자를 추가한다. 이렇게 하면 최빈값이 여러 개인 경우 mode 배열에 여러 숫자가 저장된다.
mode 배열의 길이를 확인하여 최빈값이 여러 개인지 판단한다. 만약 mode 배열의 길이가 1보다 크다면, 최빈값이 여러 개이므로 -1을 반환한다. 그렇지 않으면 mode 배열의 첫 번째 요소를 반환하여 최빈값을 반환한다.

 

 

문제 4. 정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.

function solution(n) {
  let answer = [];

  for (let i = 1; i <= n; i++) {
    if (i % 2 === 1) {
      answer.push(i);
    }
  }

  return answer;
}

i가 2로 나누어서 나머지가 1일 때만, 즉 홀수 일 때만 answer 배열에 push(추가) 하도록 함.

 

728x90
반응형

 

문제 1. 정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에 1,000을 곱한 후 정수 부분을 return 하도록 soltuion 함수를 완성해주세요.

A :

function solution(num1, num2) {
    var answer = 0;
    answer = Math.floor((num1/num2) * 1000)
    return answer;
}

num1을 num2로 나눈 값에 : num1/num2

1000을 곱한 후 : (num1/num2) * 1000 

=> num1/num2가 먼저 되어야 하므로 소괄호( )를 사용하여 묶어줌.

정수 부분을 : Math.floor((num1/num2) * 1000) 

=> DAY 1에서 정수 부분을 반환하게 하려면 Math.round가 아닌 Math.floor을 사용하는 게 정답으로 인정되기 때문에 Math.floor 사용함.

return 하도록 : return을 사용해서 answer값이 반환(리턴) 되도록 함.

 

문제 2. 정수 num1과 num2가 매개변수로 주어집니다. 두 수가 같으면 1 다르면 -1을 retrun하도록 solution 함수를 완성해주세요.

A :

function solution(num1, num2) {
    const anwer = 0;
    if(num1 == num2) {
        answer = 1;
    } else {
        answer = -1;
    }
    return answer;
}

두 수가 같으면 1 : if(num1 == num2) {  answer = 1)

=> 수학에서의 같다 표시는 등호(=) 1개지만 javascript에서는 등호 두 개 (==)를 사용하는 것이 서로 같다는 의미임.

num1과 num2가 같을 시 asnwer가 1이 되도록 조건문을 작성함.

 

두 수가 다르면 -1 : else { answer = -1) 

=> if (조건식) { ... } 에는 조건식과 일치할 시의 반환값이 들어가고, else{ ... }는 조건문과 일치하지 않을 시의 반환값이 들어감.

 

 

 

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

A :

function solution(numer1, denom1, numer2, denom2) {
  var answer = [];

  // 분자와 분모를 더한 결과 계산
  var numerator = numer1 * denom2 + numer2 * denom1;
  var denominator = denom1 * denom2;

  // 분자와 분모의 최대공약수 계산
  var gcd = getGreatestCommonDivisor(numerator, denominator);

  // 기약 분수로 변환하여 배열에 담아 반환
  answer.push(numerator / gcd);
  answer.push(denominator / gcd);

  return answer;
}

// 최대공약수를 구하는 함수
function getGreatestCommonDivisor(a, b) {
  if (b === 0) {
    return a;
  }

  return getGreatestCommonDivisor(b, a % b);
}

 

주어진 두 분수의 분자와 분모를 가지고 덧셈을 수행하여 결과 분자(numerator)와 결과 분모(denominator)를 계산하는 식으로, 분수의 덧셈은 분모를 통분하여 분자끼리 더하고 분모는 그대로 유지하는 것을 의미함.


예를 들어, 첫 번째 분수는 numer1/denom1, 두 번째 분수는 numer2/denom2로 주어졌을 때, 결과 분자는 numer1 * denom2 + numer2 * denom1로 계산하고, 결과 분모는 denom1 * denom2로 계산함.

결과 분자와 결과 분모의 최대공약수(gcd)를 구합니다. 최대공약수는 두 수의 공통된 약수 중 가장 큰 수를 의미함. 

분자와 분모의 최대공약수를 구하는 이유는, 결과 분수를 기약 분수로 만들기 위해서임.

결과 분자와 결과 분모를 최대공약수로 나누어 기약 분수로 변환함. 

이를 위해 numerator / gcd와 denominator / gcd를 계산하여 배열 answer에 순서대로 담음.

최종적으로 기약 분수로 변환된 결과인 answer 배열을 반환함.


 

 

문제 4. 정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.

A :

function solution(numbers) {
  let answer = [];

  for (let i = 0; i < numbers.length; i++) {
    let double = numbers[i] * 2;
    answer.push(double);
  }

  return answer;
}

answer = [ ] ; : 빈 배열 answer를 생성함, 이 배열은 결과를 담기 위한 용도로 사용됨.

for(let i = 0; i < numbers.length; i++) { .. } :반복문을 통해 주어진 배열 numbers의 각 원소를 순회함. 반복문에서 현재 원소를 가리키는 변수 i는 0부터 배열의 길이보다 작을 때까지 1씩 증가함.

let doble = numbers[i] * 2  : 각 원소의 두 배 값을 계산하여 변수 double에 저장함.  이를 위해 현재 원소 numbers[i]에 2를 곱함.

anwer.push(doble) : 변수 double에 저장된 값을 배열 answer에 추가함. 이를 위해 answer.push(double)를 사용하여 double 값을 배열의 끝에 추가함.

return answer : 반복문이 종료되면 배열 answer를 반환함. 이 배열은 주어진 배열 numbers의 각 원소를 두 배한 값을 가지고 있음.

728x90
반응형

문제 1. 정수 num1num2가 매개변수 주어집니다. num1과 num2를 곱한 값을 return 하도록 solution 함수를 완성해주세요.

function solution(num1, num2) {
    var answer = 0;
    answer = num1 * num2
    return answer;
    
}

answer를 0으로 초기화 시킨 후, answer 변수에 num1과 num2의 곱이 들어갈 수 있도록 answer = num1+num2 작성.

return으로 answer값을 불러오면 완성.

 

 

문제 2. 정수 num1과 num2가 주어질 때, num1과 num2의 합을 return하도록 soltuion 함수를 완성해주세요.

function solution(num1, num2) {
    var answer = 0;
    answer = num1+num2
    return answer;
}

같은 방법으로 answer를 0으로 초기화, answer에 num1과 num2의 합이 들어갈 수 있도록 answer = num1 + num2 작성.

return으로 answer 값을 return 시킴.

 

 

문제 3. 정수 num1과 num2가 주어질 때, num1에서 num2를 뺀 값을 return하도록 soltuion 함수를 완성해주세요.

function solution(num1, num2) {
    var answer = 0;
    answer = num1 - num2
    return answer;
}

answer에는 num1에서 num2를 뺀 값이 들어가야 하므로 answer = num1 - num2 작성.

answer 값이 return 될 수 있도록 함.

 

 

문제 4. 정수 num1num2가 매개변수로 주어질 때, num1을 num2로 나눈 몫을 return 하도록 solution 함수를 완성해주세요.

function solution(num1, num2) {
    var answer = 0;
    answer = Math.floor(num1/num2)
    return answer;
}

몫을 구하는 식이기 때문에 나누기 연산자 (/)를 사용. 

그냥 num1/num2를 넣고 코드 실행 했더니 틀렸다고 빨갛게 뜨길래  Math.round(반올림) 을 추가 해봤는데 이것도 4개 중 2개가 안 맞는다고 코드 실행 테스트가 빨갛게 뜸.

Math.floor(버림)을 사용했더니 성공.

 

+ Recent posts