반응형
[ 문제 ]
상근이는 세계적인 소프트웨어 회사 기글에서 일한다. 이 회사의 가장 큰 특징은 자유로운 출퇴근 시간이다. 따라서, 직원들은 반드시 9시부터 6시까지 회사에 있지 않아도 된다.
각 직원은 자기가 원할 때 출근할 수 있고, 아무때나 퇴근할 수 있다.
상근이는 모든 사람의 출입카드 시스템의 로그를 가지고 있다. 이 로그는 어떤 사람이 회사에 들어왔는지, 나갔는지가 기록되어져 있다. 로그가 주어졌을 때, 현재 회사에 있는 모든 사람을 구하는 프로그램을 작성하시오.
[ 코드 ]
1. 내 코드
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
int n = int.Parse(sr.ReadLine());
Dictionary<string, string> enterOrleave = new Dictionary<string, string>();
for (int i = 0; i < n; i++)
{
string[] s = sr.ReadLine().Split();
enterOrleave[s[0]] = s[1];
}
var enterName = enterOrleave.Where(x => x.Value == "enter").OrderByDescending(x => x.Key).Select(x => x.Key);
foreach (var name in enterName)
{
sw.WriteLine(name);
}
sw.Flush();
sw.Close();
sr.Close();
2. 다른 사람 참고 코드
using System.Text;
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
int n = int.Parse(sr.ReadLine());
var buffer = new StringBuilder(5);
HashSet<string> set = new HashSet<string>();
for (int i = 0; i < n; i++)
{
char c;
while((c = (char)sr.Read()) != ' ')
{
buffer.Append(c);
}
var str = buffer.ToString();
if(sr.Read() == 'l')
{
set.Remove(str);
}
else
{
set.Add(str);
}
buffer.Clear();
sr.ReadLine();
}
foreach (string name in set.OrderByDescending(x => x))
{
sw.WriteLine(name);
}
sw.Flush();
sw.Close();
sr.Close();
- 다른 사람 코드랑 비슷하게 해도 시간이 다른걸 보면 채점 방식이 바뀌었나 싶다.
딕셔너리보다 해시셋을 이용한게 시간과 메모리가 적게 든다.
[ 실행화면 ]
문제링크: https://www.acmicpc.net/problem/7785
반응형
'Language > C#' 카테고리의 다른 글
[C#] 백준 1764번 듣보잡 (0) | 2024.03.24 |
---|---|
[C#] 백준 1620번 나는야 포켓몬 마스터 이다솜 (0) | 2024.03.24 |
[C#] 백준 14425번 문자열 집합 (0) | 2024.03.23 |
[C#] 백준 17103번 골드바흐 파티션 (0) | 2024.03.23 |
[C#] 18870번 좌표 압축 (0) | 2024.03.22 |