C# 백준 2562


백준 1차원배열 2562


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 백준._004단계
{
    internal class question
    {
        static void Main(string[] args)
        {
            int[] A = new int[9];
            for (int i = 0; i < 9; i++)
            {
                A[i] = int.Parse(Console.ReadLine());
            }

            int[] B = new int[A.Length];
            for (int f = 0; f < A.Length; f++)
            {
                B[f] = A[f];
            }
            for (int i = 0; i < B.Length - 1; i++)
            {
                for (int j = i + 1; j < B.Length; j++)
                {
                    if (B[i] > B[j])
                    {
                        int tram = B[j];
                        B[j] = B[i];
                        B[i] = tram;
                    }
                }
            }
            Console.WriteLine(B[8]);
            int D = B[8];
            for (int p = 0; p < A.Length; p++)
            {
                if (A[p] == D)
                {
                    Console.WriteLine(p + 1);
                }
            }
        }
    }
}

최댓값

  • 최대값과 이 최대값이 몇번째 입력된 숫자 인지 확인하는 문제입니다.
  • 10871번과는 다른 방식으로 풀예정입니다.
  • 입력 : 9줄에 나누어 9개의 숫자가 주어진다고 합니다.
  • 조건
    • 자연수라하니 0이나 음수를 기준으로 잡고, 조건에 맞게 교체하는 방식으로 해도 되나, 이번에는 차순정리 방법을 사용할려고합니다.
    • 차순정리를 사용하기 위해서 사용한 방법이므로 10871 풀이방식에 마지막 반복문 방식을 합치는것이 효율적입니다
  • 출력 : 첫째줄에 최댓값을 출력, 둘째줄에 몇번째로 입력된 숫자인지 출력합니다.

가장 먼저, 입력조건에 맞게 입력을 받습니다. 이미 문제에서 9번 숫자를 입력해 준다고 했기때문에, 받아줄 입력집합 A를 선언하고, 바로 9번 반복하는 for반복문을 통해서 int형식으로 입력집합에 입력해줍니다.

이제 입력받은 데이터를 가공하는 순서입니다. 최대값을 구하고, 그 데이터의 순서를 구해야합니다. 차순 정리를 할것이므로, 입력받은 순서가 의미 없이 바뀌게 될것입니다. 따라서 하나의 집합을 더 선언해준뒤, 그대로 A집합을 차순정리할 집합인 B집합에도 동일하게 입력해줍니다.

이제 차순정리를 할 B집합이 준비되었습니다. B잡합앞에 숫자가 만약 뒤에 숫자보다 크다면, 앞에 숫자를 뒤로 보내는 작업을 할것입니다. 따라서 2개의 숫자를 비교해야 하고, 반복해야하기때문에 2개의 반복문을 선언해줍니다. 앞에 반복문 i는 앞의 숫자, j는 i+1 인 숫자입니다. 이 2가지 숫자를 조건문으로 비교하여 만약 i가 i+1인 j보다 크다면, 2개의 위치는 서로 바뀌게 조건문 내용처럼 선언합니다. 새로운 인수 trim읉 통해 잠시 바뀔 숫자를 보관하고, i를 j위치에 보낸뒤, 보관해 두었던 인수를 trim에서 i로 보내어 위치를 바꾸어줍니다. 그렇게 하면 결국 맨 마지막 숫자는 항상 가장 큰 숫자가 되고, 맨앞의 [0]은 가장 작은 숫자가 됩니다.

이렇게 구해진 최대값인 마지막 숫자를 출력해주어서 첫째줄에 출력해야할 결과값을 출력합니다.

두번째로는, 출력값이 몇번째로 입력되었는지를 출력해주어야합니다. 이것은 간단하게 이미 입력집합 A[]를 통해 데이터를 온전하게 가지고 있습니다. 이제 A에서 맞는 값을 찾아 주기만 하면됩니다. 따로 보기편하기 위해 D를 선언했지만 B[8]을 그대로 사용해도됩니다. for 반복문을 통해 9번 반복해주며, if조건문을 통해 A[p]와 D가 같은 값을 가지고 있는 지를 확인해줍니다. 이렇게 조건문에 맞는 값을 찾게되면, 바로 출력해주면 되지만, 집합은 0부터 숫자를 세기때문에 +1을 시켜서 1을 기준으로 숫자를 센것으로 맞추어 주면 됩니다.

위에 조건에서도 말했듯이, 차순정리를 사용하기 위해 강제로 차순정리로 푼문제입니다. 조건문을 통해 가장큰 숫자를 반복비교해서 찾아준뒤, 바로 그 숫자를 출력하고, 동시에 +1한 입력순서를 출력하면 되는 문제입니다.