BaekJoon[C#]

함수 1065

wny0320 2022. 9. 25. 20:43

백준 온라인 코딩 문제풀이

https://www.acmicpc.net/

 

Baekjoon Online Judge

Baekjoon Online Judge 프로그래밍 문제를 풀고 온라인으로 채점받을 수 있는 곳입니다.

www.acmicpc.net

 

코드 참고

https://replit.com/@wny0320

 

wny0320 (박 상운)

Run code live in your browser. Write and run code in 50+ languages online with Replit, a powerful IDE, compiler, & interpreter.

replit.com

 

4673, 1065에 대해서 다룸

- 15596은 언어 제한 때문에 C#으로 제출하지 못하여 패스

 


4673

using System;
using System.Collections.Generic;
class Program
{
    public static void Main(string[] args)
    {
        List<int> num_list = new List<int>();
        int self_num(int _num)
        {
            int first = _num / 10000;
            int second = _num / 1000 - _num / 10000 * 10;
            int third = _num / 100 - _num / 1000 * 10;
            int fourth = _num / 10 - _num / 100 * 10;
            int fifth = _num % 10;
            int new_num = _num + first + second + third + fourth + fifth;
            return new_num;
        }
        for(int i = 1; i <= 10000; i++)
        {
            num_list.Add(self_num(i));
        }
        for(int i = 1; i <= 10000; i++)
        {
            if(num_list.IndexOf(i) == -1)
            {
                Console.WriteLine(i);
            }
        }
    }
}

self_num이라는 메서드 생성

 

각 자리수를 구해서 변수로 지정(first ~ fifth)

- * 10 을 먼저 할 경우 몫이 변동될 수 있으므로 나누고 곱함

 

1~10000까지 self_num 메서드를 실행하여 나온 모든 값을 List에 추가

 

1~10000까지 출력하는 반복문에서 num_list.IndexOf() 메서드를 실행

 

IndexOf는 해당 list 안에 index 값이 없으면 -1을 반환하기 때문에 없는 수가 셀프넘버

 


1065

using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
    public static void Main(string[] args)
    {
        List<int> num_list = new List<int>();
        int times = Int32.Parse(Console.ReadLine());
        bool Is_hansu(int _num)
        {
            int first = _num / 1000;
            int second = _num / 100 - _num / 1000 * 10;
            int third = _num / 10 - _num / 100 * 10;
            int fourth = _num % 10;
            if(_num >= 1000)
            {
                if(first - second == second - third && second - third == third - fourth)
                {
                    return true;
                }
                return false;
            }
            else if(_num >= 100)
            {
                if(second - third == third - fourth)
                {
                    return true;
                }
                return false;
            }
            else
            {
                return true;
            }
        }
        for(int i = 1; i <= times; i++)
        {
            if(Is_hansu(i))
            {
                num_list.Add(i);
            }
        }
        Console.WriteLine(num_list.Count);
    }
}

Is_hansu 메서드 생성

 

전 문제와 동일하게 각 자리 수를 first~fifth까지 저장 후

 

자리수마다 조건을 달리하여 4자리 수일 경우

천의 자리 수 - 백의 자리수 = 백의 자리수 - 십의 자리수 = 십의 자리수 - 일의 자리수로 비교 후 bool 값 반환

 

3자리 수 일 경우는 두 개만 비교 후 bool값 반환

 

2자리 수 아래는 조건없이 한수이기 때문에 바로 true 반환

 

1~입력받은 수(times) 동안 Is_hansu 메서드 실행 후 true면 리스트에 추가

 

마지막에 num_list.Count 로 list의 index 갯수 출력

'BaekJoon[C#]' 카테고리의 다른 글

문자열 단계 1152  (0) 2022.09.27
문자열 단계 2675  (0) 2022.09.26
1차원 배열 4344  (0) 2022.09.24
1차원 배열 2562  (0) 2022.09.23
반복문 1110  (0) 2022.09.20