Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

joyful

[Javascript] 2562번 최댓값 - 백준코딩 본문

백준코딩

[Javascript] 2562번 최댓값 - 백준코딩

조이풀한 개발자 2023. 7. 31. 15:44

문제출처:https://www.acmicpc.net/problem/2562

 

2562번: 최댓값

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

www.acmicpc.net

 

 

문제


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

예를 들어, 서로 다른 9개의 자연수

3, 29, 38, 12, 57, 74, 40, 85, 61

이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.

 

 

입력


첫째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100 보다 작다.

 

 

출력


첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 몇 번째 수인지를 출력한다.

 

 

 

예제 입력


 3
29
38
12
57
74
40
85
61

 

 

예제 출력


85

8

 

 

풀이

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n').map(Number);
//[3, 29, 3, 12, 57, 74, 40, 85, 61]

let maxNum = input[0]; //최댓값을 0번째 인덱스로 변수에 담아두기
let maxIdx = 0;

for(let i = 0; i < input.length; i++) {  
    if(maxNum < input[i]) { //i번째 인덱스 값이 앞에 저장된 최댓값보다 크면
        maxNum = input[i]; //그 값을 최댓값으로 저장  
        maxIdx = i + 1;     
    }
    
}
console.log(maxNum)
console.log(maxIdx)

 


 

TIL

 

틀렸던 풀이

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n').map(Number);


let maxNum = input[0]; 
let maxIdx = 0;

for(let i = 0; i < input.length; i++) {  
    if(maxNum < input[i]) { 
        maxNum = input[i]; 
        maxIdx = i;        
    }
    // else {
    //     console.log('if문 타지 않음')
    // }
    
}
console.log(maxNum)
console.log(maxIdx + 1)  //조건문 안에서 index 값에 +1 하지 않고 반복문을 다 돈 후에 선언

 

처음에 위와 같이 풀어보니 오답이 나왔습니다.

 

그 이유는 조건문 안에서  maxIdx = i  에 +1을 하지 않고

반복문이 끝난 후 결과를 도출하는 곳에서  console.log(maxIdx + 1)   이라 선언했기 때문입니다.

 

왜 틀린걸까요?

만약 예제가 모두 동일한 수인 5였다고 생각해봅시다. (5 5 5 5 5 5 5)

이 중에서는 최대값이 없기 때문에 조건문이 성립되지 않겠죠!

그렇기 때문에 조건문 안에서 +1을 계산하지 못하는 것입니다.

 

else문에 조건이 성립되지 않으면  'if문 타지 않음' 이라는 문자를 출력하게 했더니,

바로 출력이 됩니다.

 

간단해보이지만 거대한 실수였네요..

조건문을 사용할 때 로직을 제대로 파악하면서 짜야겠습니다..!