[BOJ][C#] 1024 수열의 합

LimJaeJun·2023년 12월 13일
0

PS/BOJ

목록 보기
64/108

📕 문제

📌 링크

📗 접근 방식

연속된 숫자이기 때문에 등차 수열로 접근을 시작하였다.

18의 숫자를 적어도 2 이상의 숫자를 사용한다고 가정하였을 때

x + (x+1) = 18
2x + 1 = 18
2x = 17
x = 17/2
정수가 아니기 때문에 두개로는 18을 만들 수 없다.

그렇다면 갯수 1을 증가시켜 3 이상의 숫자를 사용한다면

x + (x+1) + (x+2) = 18
3x + 3 = 18
3x = 15
x = 5
정수로 나누어 떨어졌기 때문에 x가 5라는 것을 알 수 있고
3개를 사용했기 때문에 5 6 7을 출력하면 된다.

나는 여기서 멈추지 않고 계속 진행해보았다.
그러자 이러한 결과를 도출해낼 수 있었다.

  • x가 정수부만 존재한다면 x부터 사용한 숫자만큼 출력
  • x가 소수부가 존재한다면 1을 증가시켜 처음부터 진행
  • x가 음수가 된다면 나타낼 수 없기 때문에 -1을 출력
  • 사용하는 숫자의 갯수가 100이 넘는다면 -1을 출력

이 문제는 등차수열로 접근한다면 쉽게 풀 수 있는 문제였던 것 같다.

📘 코드

using System.Text;

namespace BOJ_16918
{
    class Program
    {
        static void Main()
        {
            using StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
            using StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));

            StringBuilder sb = new StringBuilder();
            int[] inputs = sr.ReadLine().Split().Select(int.Parse).ToArray();
            int N = inputs[0];
            int L = inputs[1];

            while (true)
            {
                int G = N - ((L - 1) * L) / 2;

                var Gx = G / L;
                var Rx = G % L;
                
                if (Gx < 0 || L > 100)
                {
                    sb.Append("-1");
                    break;
                }
                
                if (Rx != 0)
                {
                    L++;
                }
                else
                {
                    for (int i = (int)Gx; i < (int)Gx + L; i++)
                    {
                        sb.Append($"{i} ");
                    }

                    break;
                }
               
            }
            
            sw.Write(sb);
        }
    }
}

📙 오답노트

📒 알고리즘 분류

  • 수학
profile
Dreams Come True

0개의 댓글

관련 채용 정보