최댓값
배열 문제
: 9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
const test = (arr) => {
let sort = 0;
const maxNumber = Math.max(...arr);
for (let i = 0; i < arr.length; i++) {
if (arr[i] === maxNumber) {
sort = i + 1;
}
}
const result = `${sort}\n${maxNumber}`;
return `${sort}\n${maxNumber}`;
};
console.log(test([3, 29, 38, 12, 57, 74, 40, 85, 61]));
: X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다.
교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오.
입력
입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)가 한 줄에 하나씩 주어진다. 출석번호에 중복은 없다.
const test = (arr) => {
// 오름차순 정렬
let ascSortArr = arr.sort((a, b) => {
return a - b;
});
let result = [];
let j = 0;
// arr 크기까지 비교하면서 존재안할경우 result에 푸쉬
for (let i = 1; i <= 30; i++) {
if (j < arr.length && arr[j] === i) {
j++;
} else {
result.push(i);
}
}
return `${result[0]}\n${result[1]}`;
};
console.log(
test([
3, 1, 4, 5, 7, 9, 6, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30,
])
);
GPT 해결방안
const test = (submitted) => {
// 1부터 30까지의 배열 생성
const allStudents = Array.from({ length: 30 }, (_, i) => i + 1);
// 제출된 학생들의 번호 제거
submitted.forEach(num => {
const index = allStudents.indexOf(num);
if (index !== -1) {
allStudents.splice(index, 1);
}
});
// 남은 두 번호 반환 (오름차순 정렬은 기본 배열의 특성으로 이미 정렬되어 있음)
return `${allStudents[0]}\n${allStudents[1]}`;
};
:세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.
예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.
세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.
출력
첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.
const test = (arr) => {
// 내림차순 정렬
let descArr = arr.sort((a, b) => {
return b - a;
});
const maxScore = descArr[0];
let sumScore = 0;
descArr.forEach((item, index) => {
sumScore += (item / maxScore) * 100;
});
return sumScore / arr.length;
};
console.log(test([40, 80, 60]));
GPT 해결방안
const test = (arr) => {
// 최댓값을 찾음
const maxScore = Math.max(...arr);
// 각 점수를 점수/M*100으로 변환하고 합계 계산
const sumScore = arr.reduce((sum, score) => sum + (score / maxScore) * 100, 0);
// 새로운 평균 계산
const newAverage = sumScore / arr.length;
return newAverage;
};
코드 개선해야 될 점