BOJ
[BOJ/C++] 2562
eunyeong
2021. 7. 10. 16:25
https://www.acmicpc.net/problem/2562
2562번: 최댓값
9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오. 예를 들어, 서로 다른 9개의 자연수 3, 29, 38, 12, 57, 74, 40, 85, 61 이 주어
www.acmicpc.net
알고리즘을 작성할 때 최대인 경우와 최소인 경우를 체크해야 한다는 깨달음을 준 문제이다.
틀린 코드
#include<bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int max;
int arr[9];
int idx = 0;
for (int i = 0; i < 9; i++) {
cin >> arr[i];
}
max = arr[0];
for (int i = 1; i < 9; i++) {
if (max < arr[i]) { max = arr[i]; idx = i+1; }
}
cout << max << '\n' << idx;
return 0;
}
for (int i = 1; i < 9; i++) {
if (max < arr[i]) { max = arr[i]; idx = i+1; }
}
이 부분을 자세히 보자. idx=0으로 초기화 해놓은 상태이다.
예를 들어 100 1 2 3 4 5 6 7 8 일 때 (max 값은 arr[0]으로 초기화 해놓았으므로 100)
항상 max >arr[i] 이므로 idx=i+1; 코드가 실행되지 못하게 된다. 따라서 이 때 idx를 출력하면 0이 나오게 되어 틀린다.
맞은 코드
#include<bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int max;
int arr[9];
int idx = 0;
for (int i = 0; i < 9; i++) {
cin >> arr[i];
}
max = arr[0];
for (int i = 1; i < 9; i++) {
if (max < arr[i]) { max = arr[i]; idx = i; }
}
cout << max << '\n' << idx+1;
return 0;
}
출력문에서 idx+1을 출력하게 하여 이 문제를 해결할 수 있다.
맞은 코드
#include<bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int max;
int arr[9];
int idx;
for (int i = 0; i < 9; i++) {
cin >> arr[i];
}
max = arr[0];
idx = 1;
for (int i = 1; i < 9; i++) {
if (max < arr[i]) { max = arr[i]; idx = i + 1; }
}
cout << max << '\n' << idx;
return 0;
}
또는 idx=1로 초기화하여 해결할 수 있다.