https://www.acmicpc.net/problem/1620
Dictionary와 시간복잡도를 고려하여 푸는 문제다. 시간초과로 많은 시도를 했다.
1. 빠른 입출력 사용_StreamWriter와 StringBuilder로 빠른 출력이 되도록 함
2. sb.AppendLine이 아닌 '\n'이 빠르다.
3. 각각 int, string가 key인 Dictionary를 두 개 만들어줌
_처음에는 하나로 만들어 int인 key를 가져올 때 foreach 반복문이나 FirstOrDefault를 썼지만 시간초과.
using System;
using System.Text;
namespace B1620
{
class Program
{
static void Main()
{
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
StringBuilder sb = new StringBuilder();
int[] nm = Array.ConvertAll(sr.ReadLine().Split(' '), int.Parse);
//주어진 포켓몬 저장
Dictionary<int, string> dicInt = new Dictionary<int, string>();
Dictionary<string, int> dicStr = new Dictionary<string, int>();
for(int i = 0; i < nm[0]; i++)
{
string input = sr.ReadLine();
dicInt.Add(i + 1, input);
dicStr.Add(input, i + 1);
}
//문제
for (int i = 0; i < nm[1]; i++)
{
string str = sr.ReadLine();
int num;
int strToInt;
string intToStr;
bool isInt = int.TryParse(str, out num); //int인지 판별
if (isInt) //int라면 value 가져오기
{
dicInt.TryGetValue(num, out intToStr);
sb.Append(intToStr);
}
else //string이라면 int 가져오기
{
dicStr.TryGetValue(str, out strToInt);
sb.Append(strToInt);
}
sb.Append('\n');
}
sw.Write(sb);
sr.Close();
sw.Flush();
sw.Close();
}
}
}
'알고리즘 > 백준 BOJ' 카테고리의 다른 글
[ BOJ/C# ] 1929 소수 구하기 _ 에라토스테네스의 체 (0) | 2023.09.11 |
---|---|
[ BOJ/C# ] 1978 소수 찾기 (0) | 2023.09.10 |
[ BOJ/C# ] 8958 OX퀴즈 (0) | 2023.09.09 |
[ BOJ/C# ] 10809 알파벳 찾기 (0) | 2023.09.07 |
[ BOJ/C# ] 10773 제로 (0) | 2023.09.07 |