Silver Library (Archived)
BJ 2562 - JS 본문
문제
9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
예를 들어, 서로 다른 9개의 자연수
3, 29, 38, 12, 57, 74, 40, 85, 61
이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.
입력
첫째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100 보다 작다.
출력
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 몇 번째 수인지를 출력한다.
예제 입력 1
3 29 38 12 57 74 40 85 61
예제 출력 1
85 8
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().split('\n');
let max = input[0];
let maxIdx = 0;
// for 문을 사용하여 모든 값과 비교 후, max값을 구하고 그에 해당하는 max값의 index값을 저장하였다.
for (let i = 1; i < 9; i++) {
if (max < input[i]) {
max = input[i];
maxIdx = i;
}
}
console.log(max);
console.log(maxIdx + 1);
해석:
1. for 문을 사용 합니다. 예제 입력 값이 85가 최대값인건 알지만, 일단 i = 1, i <9; i++ .
2. if 문을 사용하여, 비교 라인을 생성합니다. [예: max 보다 들어오는 입력 값이 더 클 경우, max 는 들어오는 입력값과 같습니다.] // 그리고 maxIdx 는 i 를 의미합니다.
여기서 i 는 일종의 미지수 x 같은 역할을 하는 것으로 여겨집니다. 즉, 들어오는 입력 값의 가칭입니다.
3. (for 반복문과 if 비교문 구성이 완료되었으면) max 값과, maxIdx 값을 출력합니다. 주의할 점은, for 문을 사용하여 모든 값을 비교 한 후에, max 값을 구했다는 점 입니다.
그리고 나서, max 값에 해당되는 max 값을 index 의 값에 저장한 것 입니다.
이제 다시 코드블럭을 보겠습니다.
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().split('\n');
// max, maxIdx 선언 또는 초기화
let max = input[0];
let maxIdx = 0;
// for 문을 사용하여 모든 값과 비교 후, max값을 구하고 그에 해당하는 max값의 index값을 저장하였다.
for (let i = 1; i < 9; i++) {
if (max < input[i]) {
max = input[i];
maxIdx = i; // max index 는 i 와 동일하다. 이를 하는 목적은 아래의 출력부분을 참고.
}
}
console.log(max);
// if 비교문에서 maxIdx 가 i 와 동일하다고 해 둔 덕분에 +1 을 적용하면 최대값이 나온다.
//즉, 무슨 값이 입력되어서 출력이 되던, max 값에 해당 되는 index 값은 항상 최대 값이 출력되어 나온다.
console.log(maxIdx + 1);
음, 차라리 이게 정리에도 나아보이네요.
그렇게 해피엔딩...이 아니었습니다! 틀렸다고 나오네요.
적어도 출력은 맞으나, BJ에서 제출시에는 fs 모듈이 아닌 readline 모듈이 가능해 보입니다.
만약 위의 코드가 에매했다면, 아래는 정말 확실해서 보기는 좋다고 봅니다.
let readline = require('readline');
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function(line) {
input.push(line);
}).on('close', function() {
let numbers = [];
for(let i = 0; i < 9; i++) {
numbers.push(Number(input[i]));
}
let max = numbers[0];
let index = 0;
for(let j = 1; j < 9; j++) {
if(numbers[j] > max) {
max = numbers[j];
index = j;
}
}
console.log(max);
console.log(index + 1);
process.exit();
});
'CS Library > JavaScript - Data Structure' 카테고리의 다른 글
다시봐도 헷깔리는 While 문 (0) | 2021.08.25 |
---|---|
백준 1065 한수 - JS (0) | 2021.08.08 |
Note of readline module - Node.js (0) | 2021.07.24 |
JS, for 문 - 10950 번, A+B - 3, .on method (0) | 2021.07.20 |
JS, for 문 - 백준 2739: 구구단 (0) | 2021.07.20 |