#71. 백준 2566번 문제 풀이: 최댓값 문제 원본 보기
9x9 격자판에 쓰여진 81개의 0이상의 자연수가 잇을 때, 최댓값과 최댓값이 위치한 행, 열의 위치를 구하는 프로그램을 작성하시오. 입력; 첫줄 ~ 아홉 번째 줄까지, 한 줄에 공백으로 띄어진 9개의 수가 준어진다. 수는 0이상 100미만의 정수 출력: 첫줄에 최댓값, 둘째줄에 행 열 출력.
입력/출력
--입력--
3 23 85 34 17 74 25 52 65
10 7 39 42 88 52 14 72 63
87 42 18 78 53 45 18 84 53
34 28 64 85 12 16 75 36 55
21 77 45 35 28 75 90 76 1
25 87 65 15 28 11 37 28 74
65 27 75 41 7 89 78 64 39
47 47 70 45 23 65 3 41 44
87 13 82 38 31 12 29 29 80
--출력--
90
5 7
문제풀이+해설
2차원 배열에 대해 이해하고 있다면 쉽게 풀수 있는 문제이다.

1. 주어진 값들을 9행 9열씩 받아서 배열에 넣는다.
2. 이중 루프(루프 9번안에서 루프 9번)를 돌려서 배열값들을 중에 최대값을 비교해 가며, 최댓값과 위치값(행,열)을 저장해 둔다.
3. 루프가 끝나면 최댓값과 위치를 출력한다.
 
code sol.
#include <stdio.h>

int main() {
  int i, j;
  int max_v = 0, max_i = 0, max_j = 0; //최댓값, 위치 변수
  int S[9][9]; // 격자판 숫자를 저장할 배열

  for(i = 0; i < 9; i++) // 9 행을 반복
    for(j = 0; j < 9; j++) // 9 열을 반복
      scanf("%d", &S[i][j]); // 숫자를 받아 배열에 저장

  for(i = 0; i < 9; i++) { // 9 행을 반복
    for(j = 0; j < 9; j++) { // 9 열을 반복
      if(S[i][j] > max_v) { // 현재값이 최댓값보다 크면..
        max_v = S[i][j]; // 최대값 저장
        max_i = i; max_j = j; // 위치를 저장
      }
    }
  }
  printf("%d\n%d %d", max_v, max_i + 1, max_j + 1); 
  // 최댓값과 위치를 출력
  // 배열 인덱스는 0부터, 격자 판은 1부터 이므로 인덱스+1 을 해줌.
  return 0;
}
© 코드솔 - CodeSol. All Rights Reserved.