❓문제 설명
- 누적합을 구하는 문제로 주어진 배열에 대해서 주어진 값 K만큼의 누적합 중 가장 큰 수를 구하는 문제이다.
✅ 문제 해결
- 누적합을 구하기 위해서 reduce와 반복문을 사용했으며 2중반복문이 나오는 구조가 되는 것이 조금 아쉽지만 어쩔 수 없다는 생각이 들었다.
- 아래의 방식으로 코드를 구성했을 때 배열을 생성하는 부분에서 재대로 값이 나오지 않아서 아래에 있는 식을 참고해서 다시 코드를 구성하게 되었다.
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let linesRead = 0;
let inputData = [];
rl.on("line", (line) => {
linesRead++;
inputData.push(line.split(" "));
if (linesRead === 2) {
const [firstLine, secondLine] = inputData;
const [N, K] = firstLine.map(Number);
const result = [];
const numberArray = secondLine.map(Number);
if (K === N) console.log(Math.max(numberArray));
else {
for (let i = 0; i < N; i++) {
if (i < K) continue;
const value = numberArray
.slice(i - K, i)
.reduce((acc, cur) => acc + cur, 0);
result.push(value);
}
console.log(Math.max(...result));
}
rl.close();
}
});
rl.on("close", () => {
process.exit();
});
🔥 인상 깊은 남의 풀이
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let linesRead = 0;
let N = 0; // 전체 일수
let K = 0; // 연속될 일수
let temperatures = []; // 기온 데이터를 저장할 배열
rl.on("line", (line) => {
linesRead++;
if (linesRead === 1) {
// 첫 번째 줄에서 N과 K를 추출합니다.
[N, K] = line.split(" ").map(Number);
} else if (linesRead === 2) {
// 두 번째 줄에서 기온 데이터를 추출합니다.
temperatures = line.split(" ").map(Number);
// 입력을 모두 받았으므로 연산을 수행하고 출력 후, readline 인터페이스를 닫습니다.
console.log(findMaxTemperatureSum(N, K, temperatures));
rl.close();
}
});
rl.on("close", () => {
process.exit();
});
function findMaxTemperatureSum(N, K, temperatures) {
let maxSum = -Infinity; // 최대 합계를 저장할 변수를 초기화합니다.
for (let i = 0; i <= N - K; i++) {
let currentSum = 0;
for (let j = i; j < i + K; j++) {
currentSum += temperatures[j];
}
if (currentSum > maxSum) {
maxSum = currentSum;
}
}
return maxSum;
}
- 쓸 데 없이 배열에 좌표값을 저장할 필요가 없다. 실제로 사용하지 않기 때문에 이처럼 count만 올리는 방법을 통해서 구현을 하는 것이 좋은 것 같다. 메모리적으로도 코드량으로도 상당히 적은 모습을 보여준다.
❕느낀점
- node 환경을 이용하는 BOJ의 특성 상 좀 귀찮은 입력부분에 대해서 알아야하는 소요가 있어서 좀 불편했지만 단계별 카테고리별 나누어졌있는 것이 좀 더 알기 쉽고 내 점수를 명확하게 알려주기에 많이 사용할 예정이다.
- 이중반복문 구조를 내가 구현한 것보다 훨씬 더 간단히 구현한 내용이 있었고 심지어 내껀 잘 안되는 부분이 있어서 왜 안되는지에 대해서 원인을 파악하지 못했던 것이 아쉽다.
- 누적합의 구현에 있어서 간단한 문제를 풀어보려했는데 어쩌다보니 다른 요소로 인해 시간이 오래걸려서 다음부터는 시간을 좀 더 줄일 수 있을 것 같다.