728x90
저번 포스팅과의 시간 공백이 정말 많이 길었습니다.
이어서 1차원 배열 편 포스팅 하겠습니다!
BOJ 3052 - 나머지
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지입니다. 이 때, 수 10개를 입력받은 뒤 42로 나눈 나머지 중에서 서로 다른 값이 몇 개 있는지 출력하는 문제입니다. 실제로 다른 프로그래밍 언어에서나 Javascript에서도 %
연산자는 나머지를 구할 때 사용합니다. 이 문제를 해결하기 위해서는 나머지를 구하는 부분, 그리고 지금까지 나머지가 몇 개 나왔는지 저장하고 그 갯수를 구하는 부분을 구현해야 합니다.
// 입출력에 사용할 rl을 받아오는 함수
const getRl = () => {
const readline = require('readline');
return readline.createInterface({
input: process.stdin,
output: process.stdout
});
}
const rl = getRl();
// 주어진 입력들을 이용해서 정답을 반환하는 함수
const printAnswer = (inputs) => {
const saved = Array(42).fill(false);
let answer = 0;
for(let i=0; i<inputs.length; i++){
if(!saved[inputs[i]]){
saved[inputs[i]] = true;
answer++;
}
}
console.log(answer);
};
// 입력 받아와서 알고리즘 동작하는 함수
const inputs = [];
const MOD = 42;
const start = (rl) => {
rl.on('line', line => {
inputs.push(parseInt(line) % MOD);
}).on('close', () => {
printAnswer(inputs);
process.exit();
});
}
// 프로그램 동작
start(rl);
이렇게 구현할 수도 있고, Set
자료구조를 이용해서도 해결할 수 있습니다.
const printAnswer = (inputs) => {
const saved = new Set();
inputs.forEach(input => {
saved.add(input);
});
console.log(saved.size);
};
BOJ 1546 - 평균
세준이의 점수 중에 최댓값을 M이라고 하고, 나머지 모든 점수를 점수 / M * 100
으로 수정했다고 합니다. 이 방법대로 성적을 다시 계산했을 때 새로운 평균을 구하는 문제입니다. 이 때 과목 수는 N개이며, 입력은 총 2줄입니다. 이 문제를 해결하려면 각 점수에서 최댓값을 찾아야하고, 그 최댓값 M을 이용해서 새로운 점수를 만들고, 그 점수의 평균을 구하면 해결할 수 있는 문제입니다.
// 입출력에 사용할 rl을 받아오는 함수
const getRl = () => {
const readline = require('readline');
return readline.createInterface({
input: process.stdin,
output: process.stdout
});
}
const rl = getRl();
const getAvg = (numbers) => {
const sum = numbers.reduce((prev, next) => prev + next, 0);
return sum / numbers.length;
};
// 주어진 입력들을 이용해서 정답을 반환하는 함수
const printAnswer = (input) => {
const numbers = [...input[1].split(' ')].map(number => parseInt(number));
const M = Math.max(...numbers);
const newNumbers = numbers.map(number => number/M*100);
console.log(getAvg(newNumbers));
};
// 입력 받아와서 알고리즘 동작하는 함수
const input = [];
const start = (rl) => {
rl.on('line', line => {
input.push(line);
}).on('close', () => {
printAnswer(input);
process.exit();
});
}
// 프로그램 동작
start(rl);
BOJ 8958 - OX퀴즈
OOXXOXXOOO
와 같은 OX퀴즈 결과가 있을 때, 점수 계산은 연속된 O의 개수입니다. 이 때, 퀴즈 결과에 대한 점수를 계산하는 것을 구현하는 문제입니다. 연속된 O의 개수를 어떻게 구할지에 대한 고민만 해결된다면 쉽게 해결할 수 있는 문제입니다.
// 입출력에 사용할 rl을 받아오는 함수
const getRl = () => {
const readline = require('readline');
return readline.createInterface({
input: process.stdin,
output: process.stdout
});
}
const rl = getRl();
const getSigma = N => {
return N*(N+1)/2;
};
// 주어진 입력들을 이용해서 정답을 반환하는 함수
const printAnswer = (input) => {
let answer = '';
for(let i=1; i<input.length; i++) {
const scored = input[i].split('X');
const value = scored.reduce((prev, next) => {
return prev + getSigma(next.length);
}, 0);
answer += value + '\n';
}
console.log(answer);
};
// 입력 받아와서 알고리즘 동작하는 함수
const input = [];
const start = (rl) => {
rl.on('line', line => {
input.push(line);
}).on('close', () => {
printAnswer(input);
process.exit();
});
}
// 프로그램 동작
start(rl);
고생하셨습니다!
728x90
댓글