[선형] 3. 배열 문제(1)




1. 수열 최소값 위치

수열이 주어질 때, 이 수열이 있는 수 중 최소값의 위치를 모두 출력하는 프로그램을 작성하시오.
입력은 자연수로 된 배열을 받고, 시작 위치는 1로 계산하여 최소값의 위치를 배열로 반환한다.
모든 수는 100 이하의 자연수로 입력받는다.

function answer(nums) {
  let result = [];
  // 구현
  let min = nums[0];
  for (let item of nums) {
    min = item < min ? item : min;
  }
  nums.forEach((item, index) => {
    if (item == min) result.push(index);
  });

  // 구현 종료
  return result;
}

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

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

// output

//인덱스로 배열을 컨트롤 할때는 새 배열의 인덱스로 담을 변수를 만드는 것이 좋다.
  let cnt = 0;
  nums.forEach((item, index) => {
    if (item == min) {
      result[cnt] = index;
      cnt++
    }
  });



2. 체스 세트

오래된 창고에서 체스판과 체스 기물을 발견했다.
불행히도 기물 별 개수가 부족하거나 많아, 완전한 한 세트를 이루고 있지 못하고 있다.
게임을 하기 위해 부족하거나 많은 기물의 개수를 계산하여 반환하는 프로그램을 제작하시오.
기물의 개수는 배열 형태로 아래와 같이 King 부터 pawns 순으로 들어오며,
한 게임을 하기 위해 필요한 기물의 개수는 아래와 같다.
king(1), queen(1), rooks(2), bishops(2), knights(2), pawns(8)

function answer(chess) {
  let result = [];
  // 구현
  let origin = [1, 1, 2, 2, 2, 8];

  let cnt = 0;
  for (let i = 0; i < origin.length; i++) {
    result[cnt] = origin[i] - chess[i];
    cnt++;
  }

  // 구현 종료
  return result;
}

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

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

result[cnt++] = origin[i] - chess[i]; 로 줄일 수 있다!



3. 두 수 최대 합

수열이 주어질 때, 이 중 두 개의 수를 선택하여 최대 합이 나올 수 있도록 프로그램을 제작하시오.
입력은 정수로 된 배열을 받고, 최대 합이 나올 수 있는 두 수를 배열 형태로 반환한다.
배열로 입력되는 정수를 10~20개 사이이며, 정수의 범위는 -20 ~ +20 사이의 값이 입력된다

function answer(nums) {
  let result = [];
  // 구현
  nums.sort((x,y)=>y-x)
  result.push(nums[0])
  result.push(nums[1])

  // 구현 종료
  return result;
}

let input = [
  // TC : 1
  [-11,5,8,18,-2,-3,6,4,17,10,9],
  // TC : 2
  [3,7,-14,2,-6,13,-20,-2,-7,6,-17,-5,14,-9,19],
  // TC :3
  [-15,-4,-8,12,-8,-8,9,10,15,-2,10,-14,2,14,19,-9,3,-18,14],
];

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

// output
// #1[ 18, 17 ]
// #2[ 19, 14 ]
// #3[ 19, 15 ]
function answer(nums) {
  let result = [];
  // 구현
  result = nums[0] > nums[1] ? [nums[0], nums[1]] : [nums[1], nums[0]];
  //   console.log(result); // #1[ 5, -11 ] #2[ 7, 3 ] #3[ -4, -15 ]
  for (let i = 0; i < nums.length; i++) {
    if (nums[i] > nums[0]) {
      result[1] = result[0];
      result[0] = nums[i];
    } else if (nums[i] > nums[1]) {
      result[1] = nums[i];
    }
  }
  // 구현 종료
  return result;
}



4. 일곱 난장이

일터에 나갔던 난장이 9명이 와서는 모두 자기가 일곱 난장이 중 하나라고 우기고 있다.
모든 난장이의 가슴에는 숫자가 표시된 배지가 있는데, 다행이도 일곱 난장이의 배지에 표시된 숫자의 합이 100이라는 단서로 일곱 난장이를 분별할 수 있다.
일곱 난장이를 분별하는 프로그램을 작성하시오.
배지 값은 100이하 자연수로 들어오며, 일곱 난장이의 배지 값을 기존 순서대로 배열에 넣어 반환한다.

function answer(dwarf) {
  let result = [];
  // 구현
  result = [...dwarf];
  let sum = 0;
  for (let i of dwarf) {
    sum += i;
  }
  sum -= 100;
  console.log(sum);
  for (let j = 0; j < dwarf.length; j++) {
    for (let k = j + 1; k < dwarf.length; k++) {
      if (dwarf[j] + dwarf[k] == sum) {
        result.splice(j, 1).splice(k-1, 1);
      }
    }
  }

  // 구현 종료
  return result;
}

let input = [
  // TC : 1
  [1, 5, 6, 7, 10, 12, 19, 29, 33],
  // TC : 2
  [25, 23, 11, 2, 18, 3, 28, 6, 37],
  // TC :3
  [3, 37, 5, 36, 6, 22, 19, 2, 28],
];

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

// output



5. 나무 그리기

조카가 나무 그리기를 어려워 하고 있다. 어린 조카를 위해 나무를 그려주는 프로그램을 만들어주자.
자연수를 높이로 입력 받고 대칭형 형태로 나무 문자열을 만들어 반환한다.
각 행 별로 개행 문자를 넣어주면 *을 찍으며 출력 값 형태로 나무를 그려준다.

function answer(height) {
  let str = "\n";
  for (let i = 1; i <= height; i++) {
    for (let j = 1; j <=height-i; j++) {
      str += " ";
    }
    for (let k = 1; k <= 2 * i - 1; k++) {
      str += "*";
    }
    str += "\n";
  }
  // 구현

  // 구현 종료
  return str;
}

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

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

// output