반응형
[ 문제 ]
수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.
[ 코드 ]
1. 내 코드
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
int[] NM = sr.ReadLine().Split().Select(int.Parse).ToArray();
int[] N = sr.ReadLine().Split().Select(int.Parse).ToArray();
// 누적 합 계산
int[] arrSum = new int[N.Length + 1];
for (int i = 1; i <= N.Length; i++)
{
arrSum[i] = arrSum[i - 1] + N[i - 1];
}
for (int a = 0; a < NM[1]; a++)
{
int[] M = sr.ReadLine().Split().Select(int.Parse).ToArray();
int i = M[0];
int j = M[1];
int sum = arrSum[j] - arrSum[i-1];
sw.WriteLine(sum);
}
sw.Flush();
sw.Close();
sr.Close();
2. 다른 사람 코드
using System;
using System.IO;
var sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
var input = new int[2];
Read();
(var n, var m) = (input[0], input[1]);
var line = sr.ReadLine()!;
var nextIndex = 0;
var nextItem = 0;
var sum = new int[n + 1];
for (int i = 0; i < line.Length; i++)
{
if (line[i] == ' ')
{
sum[nextItem + 1] = sum[nextItem++] + int.Parse(line.AsSpan(nextIndex, i - nextIndex));
nextIndex = i + 1;
}
}
sum[nextItem + 1] = sum[nextItem++] + int.Parse(line.AsSpan(nextIndex));
var sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
while (m-- > 0)
{
Read();
sw.Write(sum[input[1]] - sum[input[0] - 1]);
sw.Write('\n');
}
sr.Close(); sw.Close();
void Read()
{
var line = sr.ReadLine();
var space = line!.IndexOf(' ');
input[0] = int.Parse(line.AsSpan(0, space));
input[1] = int.Parse(line.AsSpan(space + 1, line.Length - space - 1));
}
3. 시간 초과 코드
- 중첩반복문
using System.Text;
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
StringBuilder sb = new StringBuilder();
int[] NM = sr.ReadLine().Split().Select(int.Parse).ToArray();
int[] N = sr.ReadLine().Split().Select(int.Parse).ToArray();
for (int a = 0; a < NM[1]; a++)
{
int sum = 0;
int[] M = sr.ReadLine().Split().Select(int.Parse).ToArray();
int i = M[0];
int j = M[1];
for (int k = i; k <= j; k++)
{
sum += N[k-1];
}
sb.AppendLine($"{sum}");
}
sw.Write( sb.ToString() );
sw.Flush();
sw.Close();
sr.Close();
[ 실행화면 ]
문제링크: https://www.acmicpc.net/problem/11659
반응형
'Language > C#' 카테고리의 다른 글
[C#] 백준 1654번 랜선 자르기 (0) | 2024.04.07 |
---|---|
[C#] 백준 1388번 바닥 장식 (그래프- 깊이 우선 탐색(DFS)) (0) | 2024.04.06 |
[C#] 백준 24416번 알고리즘 수업 - 피보나치 수 1 (0) | 2024.04.05 |
[C#] 백준 16483번 접시 안의 원 (0) | 2024.04.05 |
[C#] 백준 22938번 백발백준하는 명사수 (0) | 2024.04.05 |