SMALL
https://www.acmicpc.net/problem/2798
2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장
www.acmicpc.net
- 문제
- 문제풀이
3중 for문을 사용하고 각 자리의 경우의 수가 겹치지 않게 범위를 설정해준다. 처음에는 조건문을 통해 겹치지 않게 했었다.
using System;
internal class Program
{
public static void Main()
{
string[] input1 = Console.ReadLine().Split();
string[] input2 = Console.ReadLine().Split();
int sum = 0;
int temp = 0;
for(int i = 0; i < int.Parse(input1[0]); i++)
{
for(int j = 0; j < int.Parse(input1[0]); j++)
{
for(int k = 0; k < int.Parse(input1[0]); k++)
{
if (int.Parse(input2[i]) != int.Parse(input2[j])&&int.Parse(input2[j]) != int.Parse(input2[k]) && int.Parse(input2[i]) != int.Parse(input2[k]))
{
temp = int.Parse(input2[i]) + int.Parse(input2[j]) + int.Parse(input2[k]);
}
if (sum <= temp && temp <= int.Parse(input1[1]))
{
sum = temp;
}
}
}
}
Console.WriteLine(sum);
}
}
하지만 이렇게 하는 것보다 for문에서 범위를 제한하는것이 속도가 더 빠르게 나왔다.
- 코드 1
using System;
internal class Program
{
public static void Main()
{
string[] input1 = Console.ReadLine().Split();
string[] input2 = Console.ReadLine().Split();
int sum = 0;
int temp = 0;
for(int i = 2; i < int.Parse(input1[0]); i++)
{
for(int j = 1; j < i; j++)
{
for(int k = 0; k < j; k++)
{
temp = int.Parse(input2[i]) + int.Parse(input2[j]) + int.Parse(input2[k]);
if (sum <= temp && temp <= int.Parse(input1[1]))
{
sum = temp;
break;
}
}
}
}
Console.WriteLine(sum);
}
}
- 후기
프로그래밍에 신경쓸게 아니라 수학적인 고민도 많이 필요할 것 같다.
LIST
'백준 > C#' 카테고리의 다른 글
[C#]백준 10870: 피보나치 수 5 (0) | 2023.03.15 |
---|---|
[C#]백준 2839번: 설탕 배달 (2) | 2023.03.13 |
[C#]백준 1436번: 영화감독 숌 (0) | 2023.03.13 |
[C#]백준 2231번: 분해합 (0) | 2023.03.13 |
[C#]백준 16916번: 부분 문자열 (0) | 2023.03.13 |