본문 바로가기
C#/C# : Baekjoon

[백준] C# : 상수(2908번)

by TODAYCODE 2021. 11. 9.
반응형

백준 단계별로 풀어보기 7단계 7번문제

 

2908번: 상수

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두

www.acmicpc.net

문제의 핵심

1. 숫자형태를 자유롭게 변형할 수 있는가?

2. 새로운 int형과 반복문을 사용해서 숫자 뒤집는 방법

 


 

입력받은 숫자에서 특정 자리의 숫자만 사용해야하거나

숫자를 반대로 뒤집거나 하는 문제는 매우 흔하게 출제된다.

따라서 이러한 유형을 익혀두는 것이 굉장히 중요하다.

 

문제를 풀기위해서는 첫번째로 당연히 입력을 받아와야한다.

숫자 2개가 띄어쓰기로 한번에 주어지므로,

Console.ReadLint().Split()을 사용해서 숫자 2개를 각각 배열에 담는다.

그리고 Array.ConvertAll()을 사용해서 배열을 한번에 형 변환을 할 수 있다.

이 과정을 거치면 입력받은 숫자 2개가 int형태로 배열에 각각 담기게 된다.

 

이제 우리가 해야할 작업은 입력받은 숫자를 거꾸로 뒤집는 것이다.

보통 이런 식의 과정은 숫자 10을 나누거나 곱하거나 나머지연산을 하는 방식으로 이뤄진다.

앞선 과정을 통해서 a[0]에는 첫번째 숫자, a[1]에는 두번째 숫자가 들어있다.

그리고 뒤집어진 숫자를 저장하기 위한 int형 변수를 2개를 새로 만들어준다.

while( a[0] > 0 ) {

num1 += a[0] % 10;

num1 *= 10;

a[0] /= 10; }

위의 코드를 작성해주면, 반복문이 한번 진행될 때마다,

새로운 변수에는 a[0]의 1의자리 숫자가 더해진 뒤에 10이 곱해지고,

a[0]는 10으로 나눠진다.

이걸 a[0]가 0보다 작아질때까지 반복한다.

 

이 과정을 통해서 입력받은 숫자들을 뒤집어서 비교할 수 있게 되었다.

각 숫자를 비교해서 큰 숫자를 출력하면 되는데 if문을 사용하면 또 코드가 길어지므로

3항 연산자를 사용해서 한줄로 표현할 수도 있다.

 

 

 

정답 코드

using System;

namespace 상수
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] s = Console.ReadLine().Split();
            int[] a = Array.ConvertAll(s, int.Parse);

            int num1= 0;
            int num2 = 0;

            while (a[0] > 0)
            {
                num1 += a[0] % 10;
                num1 *= 10;
                a[0] /= 10;
            }
            while (a[1] > 0)
            {
                num2 += a[1] % 10;
                num2 *= 10;
                a[1] /= 10;
            }
            Console.WriteLine(num1 >= num2 ? num1/10 : num2/10);
        }
    }
}
반응형

댓글