이 문제가 코딩 테스트를 하면서 아마 처음으로 새로운 기술을 배운 문제일 것이다.
일반적인 Console.WriteLine을 사용하면 시간 초과로 문제가 틀렸다고 뜨는 특이한 문제다.
여기서는 새로운 입출력 방법에 대해서 알기만 하면 쉽게 풀 수 있다.
C#에서는 streamReader와 streamWriter에 대해서 공부하면 쉽게 풀 수 있다.
물론 모두 이해하려면 버퍼스트림도 알아야 한다.
이에 대해서는 따로 공부해서 메인 블로그에 올리도록 하겠다.
using System;
using System.IO;
namespace unicoti {
class Program {
static void Main(string[] args) {
StreamReader sr = new(new BufferedStream(Console.OpenStandardInput()));
StreamWriter sw = new(new BufferedStream(Console.OpenStandardOutput()));
int testCaseCount = int.Parse(sr.ReadLine());
for(int i = 0; i < testCaseCount; i++) {
string[] arr = sr.ReadLine().Split(' ');
if (int.TryParse(arr[0], out int num1) && int.TryParse(arr[1], out int num2)) {
sw.WriteLine(num1 + num2);
}
}
sr.Close();
sw.Close();
}
}
}
코드는 이렇게 구성했다.
sr과 sw를 만들어서 입출력을 구현했다.
if문으로 예외처리도 하면서 읽기도 한번에 한 코드도 인상적이다.
나머지는 쉽게 이해할 수 있을 것이다.
마지막 2줄은 스트림리더의 특징이라 설명할게 없다.
사용 후 닫는 과정이 필요하다
using System;
using System.Text;
namespace unicoti {
class Program {
static void Main(string[] args) {
int.TryParse(Console.ReadLine(), out int t);
StringBuilder sb = new StringBuilder();
for(int i = 0; i < t; i++) {
string[] arr = Console.ReadLine().Split(' ');
if (int.TryParse(arr[0], out int num1) && int.TryParse(arr[1], out int num2)) {
sb.Append((num1+num2) + "\n");
}
}
Console.WriteLine(sb);
}
}
}
또는 stringbuilder를 이용해서 더욱 간단하게 문제를 풀 수 있다.
stringbuilder에다가 저장해둔 뒤 출력문을 한번만 작성하는 방법이다.
WriteLine의 사용을 줄이는 게 가장 중요한 요점인 것 같다.
https://milkyquartz.tistory.com/28 (참고 블로그)
(왕위를.. 계승중입니다)
오늘의 느낀점)
더 빠른 입출력 StreamReader와 StreamWriter에 대해서 알 수 있었다.
리팩토링이나 최적화를 할때 유용하게 사용할 수 있을 것 같다.
근데 사실 입출력을 게임 개발에서 할 이유가 없어서 사용 못할 것 같기도 하다.
그래도 새로운 기술과 몰랐던 정보를 알게 되어 고마운 문제이다.
stringbuilder는 이미 알고 있었으나 사용법을 다시 떠올릴 수 있었고,
지금까지 변수를 하나 만든 다음에 int.tryparse를 사용했었는데,
out int variable 형식을 사용하면 만듦과 동시에 저장이 가능하며
null 참조 가능 에러도 피할 수 있다는 걸 알게 되었다.
개인적으로 더 깊게 공부해서 메인 블로그에 올려야겠다.
그 글이 완료될 쯤이면 이 글에도 링크가 올라가 있을 것이다.
이상으로 도움이 되었길 바라며,
끝.
'코딩테스트 (C#)' 카테고리의 다른 글
백준 11022 : A+B - 8 (0) | 2024.08.28 |
---|---|
백준 11021 : A+B - 7 (0) | 2024.08.27 |
백준 25314 : 코딩은 체육과목 입니다 - C# 풀이 (0) | 2024.08.27 |
백준 25304 : 영수증 - C# 풀이 (0) | 2024.08.23 |
백준 8393 : 합 - C# 풀이 (0) | 2024.08.22 |
댓글