2학기 6주차_알고리즘( 백준2566번 : 최댓값)

2023. 11. 11. 11:29Algorithm ( p & swlug )/Baekjoon

 

문제

<그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.

예를 들어, 다음과 같이 81개의 수가 주어지면 이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다.

입력

첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100보다 작은 자연수 또는 0이다.

출력

첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.

 

 

📌 내풀이

 

 

# 첫번째 도전

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {

	int MAX=0;
	int R;
	int array[9][9];
	int MAXr, MAXc;
	int i, j;

	for (int i = 0; i < 9; i++) {
		
		for (int j = 0; j < 9; j++) {
			scanf("%d", &array[i][j]);

			if (array[i][j] > MAX) {
				MAX = array[i][j];
				MAXr = i + 1; // 1부터니까 +1 하기
				MAXc = j + 1;
			}
		}
	}
	printf("%d", MAX);
	printf("%d",MAXr,MAXc );
	return 0;
}

 

 

  1. 일단 문제에서 2차원 배열을 사용해야한다는 것을 생각해서 배열 array를 선언했다.
  2. [9][9] 크기에 배열 array를 선언하고 for문을 이용해서 값을 저장했다.
  3. 그리고 만약에 0보다 그값이 크면 MAX에 저장하도록 했고 , MAXr,MAXc로 행과 열을 선언하고 표시하도록 했다.
  4. 그리고 printf로 첫줄에는 최댓값을 그리고 다음줄에는 행과 열을 출력하도록 코드를 작성했다.

 

 

 

 

# 두번째 도전 

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {

    int MAX = 0;
    int array[9][9];
    int MAXr, MAXc;

    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < 9; j++) {
            scanf("%d", &array[i][j]);

        
            if (array[i][j] > MAX) {
                MAX = array[i][j];
                MAXr = i + 1;  // 행과 열은 1부터 시작하므로 +1
                MAXc = j + 1;
            }
        }
    }


    printf("%d\n%d %d\n", MAX, MAXr, MAXc);

    return 0;
}

 

 

일차적으로 코드를 한번다듬었다.

그리고 부족한 부분을 추가해주었다.

 

내가 공부하면서 찾아보니 해당 문제같은 경우 일회성 값이 들어오는 거라서 굳이 배열에 저장하지 않아도 된단다.

하지만 나는 이게 익숙하고 이렇게 풀었으니까 내가 만든 코드를 기반으로 수정해보았다.

 

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    int array[9][9] = { 0 }; // 배열 초기화
    int MAX = 0, MAXr = 1, MAXc = 1;

    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < 9; j++) {
            scanf("%d", &array[i][j]);
            if (MAX < array[i][j]) {
                MAX = array[i][j];
                MAXr = i + 1;
                MAXc = j + 1;
            }
        }
    }

    printf("%d\n%d %d", MAX, MAXr, MAXc);
    return 0;
}

 

선언 및 초기화 부분에서 초기화를 조금 손봤더니 맞았다.

초기화가 제대로 안돼서 쓰레기값이 들어가서 오류가 뜬건가?

 

 

 

첫번째 문제 풀이 끝