[JS]10. 반복문 문제




1. 별별별

자연수를 입력 받아 해당 수만큼 별을 찍는 문자열 반환 함수를 작성하시오

function answer(num) {
  // 구현
  let result = "";
  for (let i = 0; i < num; i++) {
    result += "*";
  }
  // 구현 종료
  return result;
}

let input = [
  // TC : 1
  5,
  // TC : 2
  7,
  // TC :3
  12,
];

for (let i = 0; i < input.length; i++) {
  console.log(`#${i + 1} ${answer(input[i])}`);
}

// output
#1 *****
#2 *******
#3 ************



2. 두 수 사이의 숫자

두 수 사이의 숫자들을 출력하는 함수를 작성하시오
입력은 두 숫자 값이 주어지며, 입력된 숫자를 포함한 두 수 사이의 자연수를 배열로 반환한다.

function answer(x, y) {
  // 구현
  let result = [];

  let min = x < y ? x : y;
  let max = x > y ? x : y;
  for (let i = min; i <= max; i++) {
    result.push(i);
  }

  // 구현 종료
  return result;
}

let input = [
  // TC : 1
  [3, 7], // 3 4 5 6 7
  // TC : 2
  [8, 3], // 3 4 5 6 7 8
  // TC :3
  [12, 10], // 10 11 12
];

for (let i = 0; i < input.length; i++) {
  process.stdout.write(`#${i + 1}`);
  console.log(answer(input[i][0], input[i][1]));
}

// output
#1[ 3, 4, 5, 6, 7 ]
#2[ 3, 4, 5, 6, 7, 8 ]
#3[ 10, 11, 12 ]
// x를 작은 숫자로 fix 시키는 방법 > 변수 swap
if(x > y){
    let temp = x
    x = y
    y = temp
    // 근데 이걸 es6로
    [x, y] = [y, x] 🤭🤭🤭🤭🤭🤭
}



3. 반 평균

선생님의 업무 보조를 위해 시험 점수의 반 평균을 구해주는 프로그램을 만들고자 한다.
학생 별 점수를 입력 받아 평균을 구해주는 함수를 작성하시오.
입력은 배열 형태로 학생 별 시험 점수 값이 주어지며, 해당 반의 평균 점수를 반환한다.
단, 평균 점수가 소수점으로 나올 수 있기 때문에 두번째 자리까지 반올림하여 반환한다.

function answer(score) {
  let average = 0;
  // 구현
  let sum = 0;
  for (key in score) {
    sum += score[key];
  }

  average = (sum / score.length).toFixed(2);

  // 구현 종료
  return average;
}

let input = [
  // TC : 1
  [80, 95, 65, 70, 100], 
  // TC : 2
  [82, 77, 51, 64, 73, 90, 80], 
  // TC :3
  [100, 71, 59, 88, 72, 75, 91, 93], 
];

for (let i = 0; i < input.length; i++) {
  console.log(`#${i + 1} ${answer(input[i])}`);
}

// output
#1 82.00
#2 73.86
#3 81.13
//sum 이란 변수를 만들지 않고
function answer(score) {
  let average = 0;
  // 구현
  for (key in score) {
    average += score[key];
  }

  average /= score.length
  average = average.toFixed(2);

  // 구현 종료
  return average;
}



4. 핸드폰 판매

업무 성과를 보상해주기 위해, 가장 핸드폰을 많이 판매한 종업원에게 인센티브를 부여하고자 한다.
핸드폰 판매 수량을 입력 받아서, 가장 많이 판매한 종업원 번호를 반환해주는 함수를 작성한다.
입력은 배열 형태로 종업원 별 판매 수량 값이 주어지며, 가장 많이 판매한 번호를 반환한다.
가장 첫번째 번호는 1번이다.

function answer(employee) {
  let employee_id;
  let max = employee[0]
  // 구현
  for (let i = 0; i<employee.length; i++){
      if (employee[i] > max) {
          max = employee[i]
          employee_id = i
      }
  }

  ++employee_id
  // 구현 종료
  return employee_id;
}

let input = [
  // TC : 1
  [3, 7, 9, 6, 1], 
  // TC : 2
  [2, 7, 1, 4, 3, 0, 5], 
  // TC :3
  [7, 5, 0, 1, 2, 12, 6], 
];

for (let i = 0; i < input.length; i++) {
  console.log(`#${i + 1} ${answer(input[i])}`);
}

// output
#1 3
#2 2
#3 6



5. 무한 뺄셈

두 자연수를 입력 받아 앞의 숫자에서 뒤의 숫자를 뺄셈하며 반복 연산하는 프로그램을 작성하시오.
단. 무한 연산을 막기 위해 뺀 값이 음수일 때 프로그램이 종료된다.
입력은 두 자연수가 주어지며, 연산 과정을 보여주기 위해
초기 입력된 수를 포함하여 뺄셈을 통해 나온 숫자 모드를 배열에 저장하여 반환한다.
예를 들어 두 수 6, 3이 입력 값으로 주어졌을 때,
6 - 3 = 3, 3 - 3 = 0, 3 - 0 = 3, 0 = 3 = -3 순으로 계산되고,
-3이 되었으므로 프로그램은 종료된다.
이 때 배열 형태로 반환되는 숫자는 [6, 3, 3, 0, 3]이 된다.

function answer(s, e) {
  let sequence = [];

  sequence.push(s);
  sequence.push(e);
  // 구현
  let front = s;
  let back = e;
  while (front - back >= 0) {
    sequence.push(front - back);
    temp = front;
    front = back;
    back = temp - back;
  }
  // 구현 종료
  return sequence;
}

let input = [
  // TC : 1
  [9, 3], // 9 3 6 -3 9
  // TC : 2
  [6, 3], // 6 3 3 0 3
  // TC :3
  [13, 7], // 13 7 6 1 5
];

for (let i = 0; i < input.length; i++) {
  process.stdout.write(`#${i + 1}`);
  console.log(answer(input[i][0], input[i][1]));
}

// output
#1[ 9, 3, 6 ]
#2[ 6, 3, 3, 0, 3 ]
#3[ 13, 7, 6, 1, 5 ]
// front > s
// end > e
// 로 바꾸어도 잘 동작함
function answer(s, e) {
  let sequence = [];

  sequence.push(s);
  sequence.push(e);
  // 구현

  let sum = 0;
  while (1) {
    sum = s - e;
    s = e;
    e = sum;
    if (e < 0) break;

    sequence.push(e);
  }
  // 구현 종료
  return sequence;
}

// front > s
// end > e
// 로 바꾸어도 잘 동작함

function answer(s, e) {
  let sequence = [];

  sequence.push(s);
  sequence.push(e);
  // 구현

  while (s - e >= 0) {
    sequence.push(s - e);
    temp = s;
    s = e;
    e = temp - e;
  }
  // 구현 종료
  return sequence;
}