반응형
[ 문제 ]
준석이는 두 동생을 위해 사탕 가게에서 사탕을 최대한 많이 사 가려고 한다. 사탕 가게에는 개의 사탕 묶음이 있으며 번째 사탕 묶음에는 개의 사탕이 있다. 준석이는 정말 부자라 사탕 묶음을 마음껏 살 수 있다. 하지만 준석이가 사간 총 사탕의 개수가 홀수가 되면 두 동생이 사탕을 한 개라도 더 갖기 위해 서로 싸울 것이라 총 짝수 개의 사탕을 가져가려고 한다. 준석이를 위해서 최대로 가져갈 수 있는 사탕의 개수를 구해주자!
[ 코드 ]
1. 내 코드
- 배열의 합이 홀수라면 홀수 중 최솟값을 찾아 빼고 만약 그 값이 0이 되면 0으로 값을 초기화한다.
StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
int n = int.Parse(sr.ReadLine());
int[] arr = sr.ReadLine().Split().Select(int.Parse).ToArray();
int result = arr.Sum();
if(result % 2 != 0)
{
result = result - arr.Where(x => x % 2 != 0).Min();
if(result == 0)
{
result = 0;
}
}
sw.Write(result);
sw.Close();
sr.Close();
2. 다른 사람 코드
- 홀수값을 저장해 만약 odd안에 다른 홀수값이 있다면 sum에 odd와 arr[i]값을 누적한다.
StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
int n = int.Parse(sr.ReadLine());
int[] arr = sr.ReadLine().Split().Select(int.Parse).ToArray();
int sum = 0, odd = 0;
Array.Sort(arr, new Comparison<int>((a, b) => b.CompareTo(a))); // 내림차순 정렬
for (int i = 0; i < n; i++)
{
if (arr[i] % 2 == 1)
{
if (odd == 0)
{
odd += arr[i];
}
else
{
sum += odd + arr[i];
odd = 0;
}
}
else
{
sum += arr[i];
}
}
sw.Write(sum);
sw.Close();
sr.Close();
- 그렇게 시간이나 메모리 차이가 나지않는다. 내 코드는 메모리를 덜 사용하고, 다른 사람코드는 시간을 단축시킨다
[ 실행화면 ]
문제링크: https://www.acmicpc.net/problem/28062
28062번: 준석이의 사탕 사기
준석이는 두 동생을 위해 사탕 가게에서 사탕을 최대한 많이 사 가려고 한다. 사탕 가게에는 $N$개의 사탕 묶음이 있으며 $i$번째 사탕 묶음에는 $a_i$개의 사탕이 있다. 준석이는 정말 부자라 사탕
www.acmicpc.net
반응형
'Language > C#' 카테고리의 다른 글
[C#] 백준 30700번 KOREA 문자열 만들기 (0) | 2024.03.12 |
---|---|
[C#] 백준 18238번 ZOAC 2 (0) | 2024.03.11 |
[C#] 백준 22864번 피로도 (0) | 2024.03.11 |
[C#] 백준 11034번 캥거루 세마리2 (0) | 2024.03.11 |
[C#] 백준 2810번 컵홀더 (0) | 2024.03.11 |