관리 메뉴

사적공간

[2][3] 숫자배열에 값 입력받고, 최댓값과 최솟값 좌표 함수로 확인 후 메인함수에서 출력. 본문

KNOU_CS/C++

[2][3] 숫자배열에 값 입력받고, 최댓값과 최솟값 좌표 함수로 확인 후 메인함수에서 출력.

2sac 2024. 9. 19. 16:46
#include <iostream>
using namespace std;
int arr[2][3]; // 전역배열 선언 


void input() { // 입력을 받는 함수 
    for (int y = 0; y < 2; y++) {
        for (int x = 0; x < 3; x++) {
            cin >> arr[y][x];
        }  
    } return;
}


int getMax(int* dy, int* dx) { // 최대값 구하는 함수, 주소를 받음
    int max = arr[0][0];
    for (int y = 0; y < 2; y++) {
        for (int x = 0; x < 3; x++) {

            if (max < arr[y][x]) max = arr[y][x]; // 조건식에 맞아야 max값이 갱신되고, y와 x도 갱신됨. 

        }
    }

    for (int y = 0; y < 2; y++) { // 최댓값을 찾음(이렇게 할 필요가 없는데)
        for (int x = 0; x < 3; x++) {
            if (max == arr[y][x]) {
                *dy = y;
                *dx = x;
            }
        }
    }
    return *dy, *dx;
}

// 아래 최솟값 구하는 것도 최댓값 구하는 것과 원리는 상동함. 

int getMin(int* dy, int* dx) {
    int min = arr[0][0];
    for (int y = 0; y < 2; y++) {
        for (int x = 0; x < 3; x++) {
           
         if (min > arr[y][x]) min = arr[y][x];
       
        }
        }
    for (int y = 0; y < 2; y++) {
        for (int x = 0; x < 3; x++) {
            if (min == arr[y][x]) {
                *dy = y;
                *dx = x;
            }
        }
    }
    return *dy, *dx; 
}


int main() {
    input();  // input 함수 호출 
    int maxY, maxX, minY, minX;
    getMax(&maxY, &maxX); // 주소를 매개변수로 던져줌. 
    getMin(&minY, &minX);
    
    cout << "(" << maxY << "," << maxX << ")" << endl; // 출력. 
    cout << "(" << minY << "," << minX << ")" << endl;
    return 0;
}

 

 

최댓값 최솟값을 구할 때, 조건식을 걸고서, 이중for문이 끝나면 if 조건식 안에 max,min의 갱신과 더불어서 y와 x좌표도 실시간으로 갱신하고, void 함수로 선언하면 어차피 call by reference 라서  for문이 끝나면 return 으로 반환 없이 변수안에 값을 바꿀 수 있음. 

 

위처럼 바보같이 함수 안에 이중 for문을 두 개 쓸 필요가 없음.