반응형
https://www.acmicpc.net/problem/2562
2562번: 최댓값
9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오. 예를 들어, 서로 다른 9개의 자연수 3, 29, 38, 12, 57, 74, 40, 85, 61 이 주어
www.acmicpc.net
코드
#include <stdio.h>
int main() {
int a[9],b[9];
int temp,find_number;
for(int i = 0; i < 9; i++) {
scanf("%d",&a[i]);
b[i] = a[i];
}
for(int i = 0; i < 9; i++) {
for(int j = 0; j < 9; j++) {
if(a[j] < a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for(int i = 0; i < 9; i++) {
if(a[1] == b[i]) {
find_number = i + 1;
}
}
printf("%d\n%d",a[1],find_number);
return 0;
}
☞ 풀이 전
9개의 정수형 데이터를 저장할 수 있는 일차원 배열 a와 비교하기 위해 9개의 정수형 데이터를 저장해놓을 일차원 배열 b와 임시의 정수형 변수 temp 최댓값의 index 번호를 저장해 줄 정수형 변수 find_number를 선언했습니다.
☞ 왜?
일차원 배열 a에 9개의 정수형 데이터를 받고(이 과정에서 일차원 배열 a의 값을 일차원 배열 b에 대입해 줍니다.) 배열 a에 있는 원소들을 차례로 비교시켜 최댓값이 0번째 인덱스로 오게끔 한 뒤 원소의 순서가 바뀌기 전인 배열 a의 값이 들어있는 배열 b와 a의 0번째 인덱스 값을 비교하여 일치하는 배열 b의 인덱스 값 + 1을 find_number에 대입하면 최댓값과 최댓값의 인덱스를 찾아낼 수 있을 것이라 생각했습니다.
☞ 다른 사람의 코드
#include <stdio.h>
int main() {
int arr[10], big = 0, index;
for (int i = 1; i <= 9; i++)
{
scanf("%d", &arr[i]);
if (arr[i] > big)
{
big = arr[i];
index = i;
}
}
printf("%d\n%d", big, index);
}
☞ 느낀 점
배열의 원소를 정렬하는 것이 아닌 최댓값만 뽑아내면 되는 것이었으므로 배열을 하나 더 도입할 필요도 없었고 그냥 일반 최댓값 찾듯이 풀면 되었을 문제였는데 배열이 들어가서 어렵게 생각한 것 같습니다. 쓸 데 없이 코드길이도 길어지고 효율성도 떨어지는 풀이였습니다.
반응형
'Baekjoon' 카테고리의 다른 글
[C] 백준 1546번 : 평균 (0) | 2022.08.16 |
---|---|
[C] 백준 3052번 : 나머지 (0) | 2022.08.16 |
[C] 백준 2439번 : 별 찍기 - 2 (0) | 2022.08.13 |
[C] 백준 15552번 : 빠른 A+B (0) | 2022.08.12 |
[C] 백준 2480번 : 주사위 세개 (0) | 2022.08.11 |