본문 바로가기
Development/Baekjoon

[C#] 2566번: 최댓값

by Mobics 2025. 8. 29.

목차


    백준 단계별로 풀어보기

    25.08.29

    7단계: 2차원 배열


    2566번: 최댓값

    문제 링크 : https://www.acmicpc.net/problem/2566

     

    문제 풀이

    >> 문제를 풀기 위해 알아야 할 개념

    - StringBuilder.Clear()

    : 현재 StringBuilder 인스턴스에서 모든 문자를 제거한다.

    --> 이를 활용하여 찾은 최댓값이 기존의 최댓값보다 더 클 때, 추가한 모든 문자들을 제거해준다.

     

    ※ 참고 문서

     

    StringBuilder.Clear Method (System.Text)

    Removes all characters from the current StringBuilder instance.

    learn.microsoft.com

     

    - StringBuilder.AppendLine()

    : Append()는 int, double 등을 추가할 수 있지만 AppendLind()은 문자열만 추가할 수 있다.

    --> 이 때문에 처음에 AppendLine()으로 최댓값(int)을 넣으면서 바로 줄 바꿈을 해주려고 했는데, 컴파일러 에러가 떴다.

     

    ※ 참고 문서

     

    StringBuilder.AppendLine Method (System.Text)

    Appends the default line terminator, or a copy of a specified string and the default line terminator, to the end of this instance.

    learn.microsoft.com

     

    - 연산자 우선순위와 '+' 연산의 오버로딩

    : 처음에 최댓값의 행과 열을 출력하는 코드를 아래와 같이 작성했었는데, 출력값이 특이하게 나왔다.

    sb.Append(i + 1 + " " + j + 1);
    // 예상 출력값 : 5 7
    // 실제 출력값 : 5 61

     

    --> 알고보니, 처음 'i + 1'은 정상적으로 정수 연산이 실행됐지만, 뒤의 'j + 1'은 문자열 연결로 실행되어 j값인 6과 숫자 1이 문자열로 연결된 것이었다.

     

    ▶ 연산은 정수 연산을 마친 뒤 문자열을 연결하는 순서로 진행되므로 j + 1을 괄호로 묶어서 먼저 정수 연산으로 실행되도록 해야 원하는 결과값을 얻을 수 있다.

    --> 좀 더 가시성을 높이기 위해 'i + 1'에도 괄호를 넣어줬다.

    sb.Append((i + 1) + " " + (j + 1));

     

    >> 풀이

    1. 받은 입력값을 넣어줄 배열을 선언하고 최댓값을 담을 변수를 선언한다. 이때 배열의 값 중 최솟값이 0이므로 최댓값을 0보다 작도록 초기화한다.
    2. 이중 반복문을 통해 입력값을 받아 배열에 넣어준다.
    3. 배열에 넣을 때 그 값을 최댓값과 비교하여 최댓값보다 크다면 최댓값을 갱신해주면서 기존의 StringBuilder에 넣어둔 값들을 초기화하고, 그 최댓값과 값이 몇 행, 몇 열인지 StringBuilder에 추가한다.
    4. 마지막에 출력한다.

     

    정답 코드

    using System.Text;
    
    class Backjoon
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();
            int[,] arr = new int[9, 9];
            int max = -1;
    
            for (int i = 0; i < 9; i++)
            {
                string[] input = Console.ReadLine().Split();
    
                for (int j = 0; j < 9; j++)
                {
                    arr[i, j] = int.Parse(input[j]);
    
                    if (arr[i, j] > max)
                    {
                        max = arr[i, j];
                        sb.Clear();
                        sb.AppendLine(max.ToString());
                        sb.Append((i + 1) + " " + (j + 1));
                    }
                }
            }
            Console.Write(sb.ToString());
        }
    }

    'Development > Baekjoon' 카테고리의 다른 글

    [C#] 2563번: 색종이  (0) 2025.09.03
    [C#] 10798번: 세로읽기  (0) 2025.09.02
    [C#] 2783번: 행렬 덧셈  (1) 2025.08.28
    [C#] 25206번: 너의 평점은  (2) 2025.08.27
    [C#] 1316번: 그룹 단어 체커  (0) 2025.08.25