코딩응애의 개발블로그

왜 틀렸다는 걸까? 백준 2562번- (해결완료!!!) 본문

알고리즘 문제

왜 틀렸다는 걸까? 백준 2562번- (해결완료!!!)

이너멜 2022. 7. 31. 02:35

해당 문제 정답으로 인정이 되는 코드 

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');

const num = input.map(value => +value)
solution(num);

function solution(num) {
    let max = num[0];
    let cnt = 0;
    for (let i = 1; i < 9; i++) {
        if (max < num[i]) {
            max = num[i];
            cnt = i;
        }
    }
    console.log(max);
    console.log(cnt+1);
}
--------------------------------------------------------------------------------
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().split('\n');

const items = input.map(value => +value);

solution(items);

function solution(items) {
    let max = 0;
    let ans = 0;
    for(let i=0; i<9; i++) {
        if (max < items[i]) {
            max = items[i];
            ans = i+1;
        }
    }
    console.log(max);
    console.log(ans);
}

위에 2 코드는 정답으로 나옴 근데 내가 쓴 코드 

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(__dirname + '/input.txt').toString().trim().split('\n');

const num = input.map(value => +value)
solution(num);

function solution(num) {
    let max = num[0];
    let cnt = 0;
    for (let i = 1; i < 9; i++) {
        if (max < num[i]) {
            max = num[i];
            cnt = i + 1;
        }
    }
    console.log(max);
    console.log(cnt);
   
}

틀렸다고 나옴 원인을 살펴 봤는데 내 코드에서 for문에 cnt에다가 +1 말고 콘솔에 cnt에 플러스 1을 해야 정답이 되는데 그게 그거 아닌가? 그리고 for문에 플러스가 원인이라면 위에 코드 2번째는 for문에 +1을 해도 정답으로 인정이 된다.

물론 for문 조건식이 좀 다르긴 하지만 그거에 영향이 있진 않을것 같고 별에 별 경우를 다 넣어가지고 제출을 해봤는데

이유를 모르겠다 tlqkf 이것때문에 2시간동안 쳐 보다가 해결이 안돼서 그냥 나중에 보면 왜 틀린건지 이해가 갈까 싶어 정리하긴 하는데 w 같음 새벽에 진짜 하.

 

새벽 2시 50분경 해결 완료 

혹시나 나와 같은 사람이 있을까 싶어서 사람들이 해당 문제에 관해 질문을 올린걸 쭉 보고 있었는데 정말 내가 

멍청했다는걸 알고 해결이 완료 됨 왜 틀렸는지 

우선 반례를 들자면 입력값이 

100
29
38
12
57
74
40
85
61

일때 100 1 이 나와야 정답이지만 내 코드는 100 0 이나온다. 이유는 for문 안에서 비교할때 첫번째가 제일 큰수면

그냥 빠져나오게 되는데 이 과정에서 +1을 못하게 된다. 그래서 처음에 설정한 cnt = 0 이 그대로 출력이 되서 틀렸다고

나오는거고 반면 콘솔에 플러스 1을 해준다면 이러한 경우가 있어도 콘솔 출력 할때 +1을 해주기에 틀릴 일이 없다.

진짜 모르겠으면 다른사람이 질문했던걸 보자 그래도 모르겠으면 질문을 올리자(저번에 올린적 있는데 아무도 답변안해주긴 함..) 

Comments