1. 문제

7785번: 회사에 있는 사람



2. 개요

한 회사의 출퇴근 기록이 주어진다.

현재 회사에 남아있는 사원들의 이름을 사전의 역순으로 출력하는 문제.



3. 풀이 및 코드

3-1. 풀이

Set을 이용한다.

누군가 출근했다면 Set에 넣어주고, 퇴근했다면 Set에서 빼준다.

모든 입력에 대해 작업을 완료했으면 정렬하여 출력한다.

이 때, 문제에서는 사전의 역순이라고 되어있지만 사실은 아스키 코드의 역순이다.

Python의 경우에는 그냥 냅다 역순정렬해도 잘 되지만 C#의 경우 StringComparer.Ordinal을 이용해 이를 맞춰줘야 한다.

3-2. Python

import sys

N = int(sys.stdin.readline())

S = set()

for i in range(N):
    info = sys.stdin.readline().split()

    if info[1] == "enter":
        S.add(info[0])

    else:
        S.discard(info[0])

for p in sorted(list(S), reverse=True):
    print(p)

3-3. C#

namespace boj_7785
{
    internal class Program
    {
        static void Main(string[] args)
        {
            StreamReader sr = new StreamReader(Console.OpenStandardInput());
            StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());

            int N = int.Parse(sr.ReadLine());

            HashSet<string> S = new();

            for(int i = 0; i < N; i++)
            {
                string[] info = sr.ReadLine().Split();

                if (info[1] == "enter")
                    S.Add(info[0]);

                else
                    S.Remove(info[0]);
            }

            foreach(string p in S.ToList().OrderByDescending(x => x, StringComparer.Ordinal).ToList())
            {
                sw.WriteLine(p);
            }

            sw.Close();
        }
    }
}

Comments