joyful
[Javascript] 2562번 최댓값 - 백준코딩 본문
문제출처:https://www.acmicpc.net/problem/2562
문제
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 5 5)
이 중에서는 최대값이 없기 때문에 조건문이 성립되지 않겠죠!
그렇기 때문에 조건문 안에서 +1을 계산하지 못하는 것입니다.
else문에 조건이 성립되지 않으면 'if문 타지 않음' 이라는 문자를 출력하게 했더니,
바로 출력이 됩니다.
간단해보이지만 거대한 실수였네요..
조건문을 사용할 때 로직을 제대로 파악하면서 짜야겠습니다..!
'백준코딩' 카테고리의 다른 글
[Javascript] 3052번 나머지 - 백준코딩 (2) | 2023.08.03 |
---|---|
[Javascript] 5597번 과제 안 내신 분..? - 백준코딩 (2) | 2023.08.03 |
[Javascript] 10813번 공 바꾸기 - 백준코딩 (0) | 2023.07.26 |
[Javascript] 10810번 공 넣기 - 백준코딩 (1) | 2023.07.20 |
[Javascript] 준비단계 - node.js 입출력 방법과 오류 해결법 - 백준코딩 (0) | 2023.06.10 |