[JS]13. 종합 문제 (2)
in JS
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