Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

시작은 0부터

8. 백준 함수 2단계 : 셀프 넘버(4673), 드래그 영역 주석 및 해제 본문

C# 학습일지

8. 백준 함수 2단계 : 셀프 넘버(4673), 드래그 영역 주석 및 해제

0base 2022. 7. 12. 11:23

셀프넘버가 아닌 값을 찾는 것까지는 도달했지만 그것들을 추려내서 셀프넘버만 골라내는 작업을 해결하지 못해 교수님의 코드를 참고했다.

셀프넘버 계산식으로 구한 값(셀프넘버가 아닌 값)을 스트링이나 스트링빌더에 문자화하여 범위(0~10000)의 모든 숫자를 문자열에 넣고 거기서 문자화한 셀프넘버가 아닌 값을 대입하여 빼려고 했는데 Distinct는 중복된 값을 고유화하여 1개로 만들지만 중복값 전체를 제거하지는 않아서 빼는 것이 안됐고, Remove로 범위 설정을 하고 지우자니 계산값이 크기 순으로 나열되지 않아 적용할 수 없었고,  Replace는 설정된 문자를 전부 바꿔버려서 중복된 숫자를 전부 바꿔버려 원하는 값을 추려낼 수 없었다. 결국 교수님의 코드를 직접보니, 굳이 문자화하지 않고 bool을 활용하여 결과값을 구분하여 출력하는 방법으로 결과를 도출해낼 수 있었다.

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            bool[] boolcheck = new bool[10001];
            int detect = 0;

            for (int i = 0; i <= 10000; i++)
            {
                detect = f(i);

                if (detect <= 10000)
                {
                    boolcheck[detect] = true;
                }
            }

            for (int i = 0; i <= 10000; i++)
            {
                if (boolcheck[i] == false)
                {
                    Console.WriteLine(i);
                }
            }
            Console.ReadLine();
        }

        static int f(int num)
        {
            int a = 0;
            int b = 0;
            int c = 0;
            int d = 0;
            int e = 0;
            int sum = 0;
            if (num < 10)
            {
                sum = num + num;               
            }
            else if (num < 100 && num >= 10)
            {
                a = num / 10;
                b = num % 10;
                sum = num + a + b;                

            }
            else if (num < 1000 && num >= 100)
            {
                a = num / 100;
                b = num % 100 / 10;
                c = num % 10;
                sum = num + a + b + c;
                

            }
            else if (num < 10000 && num >= 1000)
            {
                a = num / 1000;
                b = num % 1000 / 100;
                c = num % 100 / 10;
                d = num % 10;
                sum = num + a + b + c + d;
            }

            return sum;
        }

숫자를 문자화하여 문자의 인덱스 순서로 자릿수를 계산하는 방법을 했었는데 나머지값을 나누는 식으로 자릿수를 계산할 수 있었다. 처음에 자릿수 계산식을 잘못 설계해서 결과값이 이상해졌는데 동기와 조교님의 도움으로 결과값을 수정하여 답을 얻을 수 있었다. 식이 잘못되었을 때도 2자리수까지는 잘나왔었기에, 세자리수에서 브레이크포인트를 잡고 디버깅을 해서 문제를 잡을 수 있었다.

 

 

Ctrl + K + C 

: 드래그한 코드 블럭을 전부 주석으로 만든다. ( 앞에 //를 만든다.)

 

Ctrl + K + U

: 드래그한 코드 블럭의 주석 부분을 다시 코드로 만든다. ( 앞에 //를 없앤다.)

 

Ctrl + K + F

:  드래그 영역 줄을 정리한다. 불필요한 공백 부분을 제거하여 정렬을 맞춘다.

 

Ctrl + A

: 전체 선택

 

Ctrl + S

: 저장. 디버그를 돌리기 전에 저장을 미리 하고 돌려야 수정사항이 즉각 적용된다.