반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- 별찍기
- 대구고깃집
- 대구데이트
- C#
- 범어동맛집
- SQL
- programmers
- 들안길삼겹살
- 수성못삼겹살
- oracle
- 대구맛집
- 브루트 포스
- 조건문
- 수성구맛집
- 안지랑카페
- 수성구데이트
- 반복문
- 대구카페
- BFS
- 프로그래머스
- 수성못맛집
- 대구삼겹살
- 정렬
- 앞산카페
- 서울맛집
- 압구정데이트
- 큐
- 대명동맛집
- 오라클
Archives
- Today
- Total
모든 일상
[C# / 백준] 10448번 문제 유레카이론 본문
728x90
반응형
문제
삼각수 Tn(n ≥ 1)는 [그림]에서와 같이 기하학적으로 일정한 모양의 규칙을 갖는 점들의 모음으로 표현될 수 있다.
[그림]
자연수 n에 대해 n ≥ 1의 삼각수 Tn는 명백한 공식이 있다.
Tn = 1 + 2 + 3 + ... + n = n(n+1)/2
1796년, 가우스는 모든 자연수가 최대 3개의 삼각수의 합으로 표현될 수 있다고 증명하였다. 예를 들어,
- 4 = T1 + T2
- 5 = T1 + T1 + T2
- 6 = T2 + T2 or 6 = T3
- 10 = T1 + T2 + T3 or 10 = T4
이 결과는 증명을 기념하기 위해 그의 다이어리에 “Eureka! num = Δ + Δ + Δ” 라고 적은것에서 유레카 이론으로 알려졌다. 꿍은 몇몇 자연수가 정확히 3개의 삼각수의 합으로 표현될 수 있는지 궁금해졌다. 위의 예시에서, 5와 10은 정확히 3개의 삼각수의 합으로 표현될 수 있지만 4와 6은 그렇지 않다.
자연수가 주어졌을 때, 그 정수가 정확히 3개의 삼각수의 합으로 표현될 수 있는지 없는지를 판단해주는 프로그램을 만들어라. 단, 3개의 삼각수가 모두 달라야 할 필요는 없다.
입력
프로그램은 표준입력을 사용한다. 테스트케이스의 개수는 입력의 첫 번째 줄에 주어진다. 각 테스트케이스는 한 줄에 자연수 K (3 ≤ K ≤ 1,000)가 하나씩 포함되어있는 T개의 라인으로 구성되어있다.
출력
프로그램은 표준출력을 사용한다. 각 테스트케이스에대해 정확히 한 라인을 출력한다. 만약 K가 정확히 3개의 삼각수의 합으로 표현될수 있다면 1을, 그렇지 않다면 0을 출력한다.
예제 입&출력
소스코드
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.Eventing.Reader;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
//3가지 삼각수로 입력값을 나타내는 가능여부 함수
static bool search(int in_num, int[] arr)
{
for (int i = 1; i < 45; i++) //중복된 삼각수도 가능하므로 전부 1~44까지
{
for (int j = 1; j < 45; j++)
{
for (int k = 1; k<45; k++)
{
if (arr[i] + arr[j] + arr[k] == in_num)
{
return true;
}
}
}
}
return false;
}
public static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
int[] arr = new int[45];
for (int i = 1; i<45; i++)
{
arr[i] = i * (i + 1) / 2; 해당 삼각수를 배열에 저장
}
int cnt = int.Parse(Console.ReadLine());
for(int i = 0; i<cnt; i++)
{
if(search(int.Parse(Console.ReadLine()), arr)) sb.AppendLine("1");
else sb.AppendLine("0");
}
Console.WriteLine(sb.ToString());
}
}
}
728x90
반응형
'코딩 공부 > C#' 카테고리의 다른 글
[C# / 백준] 1181번 문제 - 단어 정렬 (0) | 2024.01.22 |
---|---|
[C# / 백준] 11651번 문제 - 좌표 정렬하기2 (0) | 2024.01.22 |
[C# / 백준] 2506번 문제 - 점수계산 (2) | 2024.01.15 |
[C# / 백준] 12789번 문제 - 도키도키 간식드리미 (0) | 2023.10.12 |
[C# / 백준] 4949번 문제 - 균형잡힌 세상 (2) | 2023.10.12 |