WalkerJei's Lifelog

백준알고리즘 2566번 최댓값 C# 본문

소프트웨어 개발/코딩테스트(기성 문제)

백준알고리즘 2566번 최댓값 C#

WalkerJei 2025. 4. 5. 19:14

세부 정보

  • 사이트: 백준알고리즘
  • 번호: 2566
  • 문제명: 최댓값
  • 언어: C#
  • 분류: 구현
  • 비고: 스폐셜 저지

 

문제

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

 

입력

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

 

출력

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

 

풀이

최댓값의 위치를 알아낼 때는 81개의 자연수 중 최댓값을 찾음과 동시에 그 위치 정보에 1을 더해서 받아오면 된다.

출력을 할 때는 Console보다 StreamWriter를 사용하면 시간을 단축할 수 있다.

StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());

// 81개의 자연수를 담을 격자판
int[,] grid = new int[9, 9];
// 81개의 자연수 중 최댓값
int maxValue = 0;
// 최댓값의 위치한 행렬번호
int[] gridPos = new int[2];

// 81개의 자연수 입력
for (int i = 0; i < 9; i++)
{
    string[] input = sr.ReadLine().Split();
    for (int j = 0; j < 9; j++)
        grid[i, j] = Convert.ToInt32(input[j]); 
}

// 81개의 자연수 중 최댓값과 위치정보 저장
for(int i = 0; i < 9; i++)
{
    for (int j = 0;j < 9; j++)
    {
        if (maxValue <= grid[i, j])
        {
            maxValue = grid[i, j];
            gridPos[0] = i + 1;
            gridPos[1] = j + 1;
        }
    }
}

// 최댓값 출력
sw.WriteLine(maxValue);
// 최댓값 위치정보 출력
sw.WriteLine(gridPos[0] + " " + gridPos[1]);

sr.Close();
sw.Close();

 

후기

이 문제를 푸는 것은 20분도 안 되어서 성공한 것 같다. 어제 배운 것을 응용하는 자리인 만큼 지역 변수를 통해 입력을 받도록 설계했다. 이러다가 코딩테스트 볼 때 특수한 경우를 제외한다면 Console보다 Stream을 더 많이 쓸 것이다. 문제를 풀 때는 1차적으로 20분의 시간이 주어지고, 시간 내에 못 풀면 2차적으로는 스스로 고민해서 답을 찾으며, 그래도 답이 안 나온다 싶으면 3차적으로 피드백을 찾는 방법으로 결정했다. 내일은 그렇게 풀어볼 것이다.