본문 바로가기
카테고리 없음

백준#2231 2023-09-13

by 하타라시 2023. 9. 13.
        int put = int.Parse(Console.ReadLine());
        int result = 0;
        for(int i = 0; i <= put; i++) {
            string temp = i.ToString();
            int arrSum = 0;

            for(int j = 0; j < temp.Length; j++) {
                arrSum += int.Parse(temp[j].ToString());
            }
            if(i + arrSum == put) {
                result = i;
                break;
            }
        }

        Console.Write(result);

처음 보자마자 생각 났던게 문제 그대로 풀이하는 것이 였는데 결과가 처참해서 다른 사람이 한 것을 찾아보았다,,

        int put = int.Parse(Console.ReadLine());
        int result = 0;
        for (int i = 1; i <= put; i++)
        {
            int sum = i;
            int num = i;

            while (num != 0)
            {
                sum += num % 10;
                num /= 10;
            }

            if (sum == put)
            {
                result = i;
                break;
            }
        }

        Console.Write(result);

다른 사람이 한 것을 통하여 이런 식으로 개선!! for문을 계속 도는 대신 한 자리수식 나누면서 연산을 한다고 이해하였으니,, 확실히 연산량이 100000 * 6 = 600000번에서 많아봐야 while(true) 100000 / 10 에서는 5번인가로 확실히 줄고,  나머지 값을 통하여 값을 가져오는 식인듯허다..

 

어렵당..