모름

https://www.acmicpc.net/problem/10817

 

10817번: 세 수

첫째 줄에 세 정수 A, B, C가 공백으로 구분되어 주어진다. (1 ≤ A, B, C ≤ 100)

www.acmicpc.net

문제

세 정수 A, B, C가 주어진다. 이때, 두 번째로 큰 정수를 출력하는 프로그램을 작성하시오. 

입력

첫째 줄에 세 정수 A, B, C가 공백으로 구분되어 주어진다. (1 ≤ A, B, C ≤ 100)

출력

두 번째로 큰 정수를 출력한다.

 

코드(1)

using System;
public class Program {

    public static void Main()
    {
        bool isGoing = true;
        while (isGoing)
        {
            // 입력 첫째줄 : 세 정수 A,B,C가 공백으로 구분되어 주어진다. A,B,C의 범위는 1보다 크거나 같거나 100보다 작거나 같다.
            string[] Numbers = Console.ReadLine().Split(' ');
            int a = int.Parse(Numbers[0]);
            int b = int.Parse(Numbers[1]);
            int c = int.Parse(Numbers[2]);
            int highNumber = 0;
            if (a < 1 || b < 1 || c < 1 || a > 100 || b > 100 || c > 100) return;
            // 출력 첫째줄 : 세 정수 중 두번 째로 큰 수가 출력된다.
            // - 세 정수를 비교해야한다.
            // - (1) a > b 경우, (2) a < b 경우
            // - (1) a > b 경우 -> (1-1) a < c 경우, (1-2) a > c 경우;
            // - (2) a < b 경우 -> (2-1) b < c 경우, (2-2) b > c 경우;
            if (a > b)
            {
                highNumber = a;

                if ( a > c)
                {
                   
                }
                else if ( a < c)
                {
                    highNumber = c;
                }
            }
            else if (a < b)
            {
                highNumber = b;
                
                if ( b > c)
                {

                }
                else if ( b < c)
                {
                    highNumber = c;
                }
            }
            Console.WriteLine(highNumber);
        }
    }
}
입력

설명을 위해서 길게 풀어써놨다. 먼저 Numbers에 공백으로 구분된 세 수를 입력받는다. 그리고 각각 정수형 a,b,c에 값을 차례대로 넣어준다. 일단 세 정수를 받는 작업이 끝났다.  - 입력완료

 

계산

그럼 이제 세 수 중 가장 큰 수를 구별해야한다. 그냥 if문으로 경우의 수를 차례차례 써나가면 된다. 그럼 highNumber에 가장 큰 수가 들어간다. 

 

그런데 틀렸다. 봤더니 세 수가 동일한 경우를 생략했었다. 다시 코드로 가 세 수가 동일한 경우를 추가한다.

            else if (a == b)
            {
                highNumber = a;
                if (a == c)
                {

                }
                else if (a > c)
                {

                }
                else if ( a < c)
                {
                    highNumber = c;
                }
            }

a == b 인 경우를 추가했다. 빈 조건문은 값이 변경될 필요가 없기 때문에 공백이다. 그럼 마지막으로 불필요한 코드를 제거해줘서 깔끔하게 볼수있게한다.

using System;
public class Program {

    public static void Main()
    {
        bool isGoing = true;
        while (isGoing)
        {
            // 입력 첫째줄 : 세 정수 A,B,C가 공백으로 구분되어 주어진다. A,B,C의 범위는 1보다 크거나 같거나 100보다 작거나 같다.
            string[] Numbers = Console.ReadLine().Split(' ');
            int a = int.Parse(Numbers[0]);
            int b = int.Parse(Numbers[1]);
            int c = int.Parse(Numbers[2]);
            int highNumber = 0;

            //예외처리
            if (a < 1 || b < 1 || c < 1 || a > 100 || b > 100 || c > 100) return;

            // 출력 첫째줄 : 세 정수 중 두번 째로 큰 수가 출력된다.
            // - 세 정수를 비교해야한다.

            if (a > b)
            {
                highNumber = a;

                if ( a < c)
                {
                    highNumber = c;
                }
            }
            else if (a < b)
            {
                highNumber = b;
                
                if ( b < c)
                {
                    highNumber = c;
                }
            }
            else if (a == b)
            {
                highNumber = a;

                if ( a < c)
                {
                    highNumber = c;
                }
            }

            Console.WriteLine(highNumber);
        }
    }
}

완성!

 

콘솔실행화면

문제를 잘못봤다. 보니까 두번째로 큰 수를 구하란거였는데... 가장 큰 수를 구하고 있었다... 바보네

 

고쳐쓴 코드

using System;
public class Program {

    public static void Main()
    {
        bool isGoing = true;
        while (isGoing)
        {
            // 입력 첫째줄 : 세 정수 A,B,C가 공백으로 구분되어 주어진다. A,B,C의 범위는 1보다 크거나 같거나 100보다 작거나 같다.
            string[] Numbers = Console.ReadLine().Split(' ');
            int a = int.Parse(Numbers[0]);
            int b = int.Parse(Numbers[1]);
            int c = int.Parse(Numbers[2]);

            int middleNumber = 0;

            //예외처리
            if (a < 1 || b < 1 || c < 1 || a > 100 || b > 100 || c > 100) return;

            // 출력 첫째줄 : 세 정수 중 두번 째로 큰 수가 출력된다.
            // - 세 정수를 비교해야한다.

            if (a > b)
            {
                if (a > c)
                {
                    if (b > c)
                    {
                        middleNumber = b;
                    }
                    else
                    {
                        middleNumber = c;
                    }
                }
                else
                {
                    middleNumber = a;
                }
            }
            else if ( a < b)
            {
                if ( b > c)
                {
                    if ( a > c)
                    {
                        middleNumber = a;
                    }
                    else
                    {
                        middleNumber = c;
                    }
                }
                else
                {
                    middleNumber = b;
                }
            }
            else if (a == b)
            {
                middleNumber = a;
            }

            Console.WriteLine(middleNumber);
        }
    }
}

.... 다해보고 다른사람이 한 코드를 봤는데 훨씬 쉽게하는걸 볼수있었다. 자괴감... 별의 별 방법이 다있었다. 나는 노가다를 했다.