관리 메뉴

Silver Library (Archived)

BJ 2562 - JS 본문

CS Library/JavaScript - Data Structure

BJ 2562 - JS

Chesed Kim 2021. 8. 6. 18:00
반응형

문제

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 모듈이 가능해 보입니다.

 

이 경우는, 여기를 참고.

 

[백준/JS] 2562번 최댓값

9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.

velog.io

만약 위의 코드가 에매했다면, 아래는 정말 확실해서 보기는 좋다고 봅니다.

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();
});