[JS]13. 종합 문제 (2)




1. 배열 내 최댓값 구하기

정수가 저장된 배열을 입력 받아 그 중 최대값을 반환해주는 함수를 구현하시오.
Math 객체는 이용하지 않는다.
입력 값은 배열 형태로 값은 정수가 입력되며, 그 중 최대값을 반환한다.


function answer(arr) {
  let max;
  // 구현
  max = arr[0];
  for (item in arr) {
    max = arr[item] > max ? arr[item] : max;
  }

  // 구현 종료
  return max;
}

let input = [
  // TC : 1
  [1, 6, 5, 2, 3],
  // TC : 2
  [19, 41, 23, -4, 17],
  // TC :3
  [-64, -27, -41, -33, -59],
];

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

// output
// #1 6
// #2 41
// #3 -27
  • 첫 값을 max = Number.MIN_SAFE_INTEGER 로 해줘도 된다.

  • Math 사용하기 : max = Math.max.apply(null, arr)



2. 스팸 메일

최근 스팸 메일이 급증하여, 메일 업무 처리에 지장이 생겼다.
대소문자를 구분하지 않고 Advert 가 포함되는 메일 제목은 스팸 처리하는 함수를 구현하시오.
입력 값은 문자형이며, 출력 값은 스팸으로 판단할 경우 true, 아닐 경우 false 로 반환한다.



function answer(str) {
  let spam_flag;
  // 구현
  spam_flag =  str.toUpperCase().includes("ADVERT") ? true : false
  // 구현 종료
  return spam_flag;
}

let input = [
  // TC : 1
  "RE: Requset documents",
  // TC : 2
  "[Advertisement] free mobile!",
  // TC :3
  "50% off this week (advertising)",
];

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

// output
// #1 false
// #2 true
// #3 true



3. 배열 회전

배열을 입력 받아 순서를 역으로 만들어 반환해주는 함수를 구현하시오.
본 문제는 reverse 함수를 이용하지 않고 반복문을 통해 구현해야 한다.
입력은 배열 형태로 값은 정수형과 문자형으로 구성되어 있으며, 역으로 변환된 배열을 반환한다.



function answer(user) {
  let reverse = [];
  // 구현
  for (let i = 0; i < user.length; i++){
      reverse.push(user[user.length-1-i])
  }
  // 구현 종료
  return reverse;
}

let input = [
  // TC : 1
  [1, 2, 3, 4],
  // TC : 2
  [-1, 6, "hello", -15],
  // TC :3
  ["apple", "banana", "mango"],
];

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

// output
// #1[ 4, 3, 2, 1 ]
// #2[ -15, 'hello', 6, -1 ]
// #3[ 'mango', 'banana', 'apple' ]


  • 도저히 다른 방법은 생각이 안났다…..😭
  • 아래 코드가 훨씬 깔끔하다👍
  • shift/unshift 도 생각해보기
for (let i = user.length - 1; i >= 0; i--){
      reverse.push(user[i])
  }
  • length 만큼 돌 것을 length/2 번 돌게끔
    for (let i = 0; i < user.length / 2; i++) {
      tmp = user[i];
      user[i] = user[user.length - 1 - i];
      user[user.length - 1 - i] = tmp;
    }
    



4. 문자 교정

우리 출판사는 출판되는 모든 책의 단어들이 앞 글자가 대문자로 표기되어야 한다.
업무로 바쁜 동료를 위해, 원고의 단어 앞 글자를 모두 대문자로 변경시켜주는 함수를 구현하시오.
입력 값은 문자형 형태의 단어들이며, 교정된 문자형으로 치환 시켜 반환한다.


function answer(str) {
  let fix_str = "";
  // 구현
  let split_str = str.split(" ");
  for (let i in split_str) {
    let tmp = split_str[i].replace(split_str[i][0], split_str[i][0].toUpperCase())
    if (i == 0) {
        fix_str += tmp
    } else {
        fix_str = fix_str + " " + tmp
    }

  }

  // 구현 종료
  return fix_str;
}

let input = [
  // TC : 1
  "Hello, My name is john",
  // TC : 2
  "This week is closed due to COVID-19",
  // TC :3
  "fifty percent off this week",
];

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

// output
// #1 Hello, My Name Is John
// #2 This Week Is Closed Due To COVID-19
// #3 Fifty Percent Off This Week
  • 이게 내 최선이었는데 진짜 더럽다..ㅠ
for (let i of str.split(" ")){
    fix_str += i[0].toUpperCase() + i.slice(1) + " "
  }
  • replace 부분만 변경된 것인데 훨씬 깔끔하다..



5. 2차원 배열의 곱셈 합

2차원 배열을 입력 받아 모든 요소를 곱한 값을 반환해주는 함수를 구현하시오.
입력 값은 2차원 배열로 Number 자료형 값이 들어오며, 모든 요소를 곱한 값을 반환해준다.



function answer(arr) {
  let product = 1;
  // 구현
  for (let i = 0; i < arr.length; i++) {
    for (let j = 0; j < arr[i].length; j++) {
      product *= arr[i][j];
    }
  }
  // 구현 종료
  return product;
}

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

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

// output
// #1 6
// #2 5040
// #3 54