2024-03-22 00:31:12

첫째 줄에는 몇명의 회원이 등록했는지 입력이 주어진다.

둘째 줄부터는 회원의 나이, 이름이 한 줄에 띄워쓰기로 구분되어 주어진다.

주어진 회원들을 나이 -> 회원 가입 순서대로 정렬하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System.IO;
using System.Text;
using System.Linq;
using System.Reflection.PortableExecutable;
 
namespace 연습장
{
    internal class Program
    {
        static void Main(string[] args)
        {
            using var reader = new StreamReader(Console.OpenStandardInput());
            using var print = new StreamWriter(Console.OpenStandardOutput());
            StringBuilder sb = new StringBuilder();
 
            List<Tuple<intintstring>> list = new List<Tuple<intintstring>>();
 
            int N = int.Parse(Console.ReadLine());
            string[] mem;
            int count = 0;
 
            for (int i = 0; i < N; i++)
            {
                count++;
                mem = Console.ReadLine().Split();
                list.Add(new Tuple<intintstring>(int.Parse(mem[0]), count, mem[1]));
 
            }
            list.Sort();
 
            foreach (Tuple<intintstring> a in list)
                sb.Append(a.Item1 + " " + a.Item3 + "\n");
 
            Console.Write(sb);
 
        }
    }
}
cs

주어진 입력은 나이, 이름 뿐이라 가입 순서를 간과할 수 도 있다.

실제로는 이름은 사실상 허수고, 나이와 가입 순서로 정렬을 하기 때문에, 보이지 않는 값인 등록 순서를 넣어주는 것이 핵심인 것 같다.

리스트에 튜플을 <int, int, string>(나이, 가입순서, 이름> 순으로 받아와서, 정렬을 해준다.

c#에서 지원하는 자동 정렬 메서드는 튜플에 입력된 아이템 순서대로 정렬을 해주기 때문에, 이름이 두번째 아이템으로 오게 된다면 예제에서 준규와 동현의 순서가 바뀌어서 출력 될 것이다.

또 하나 알아낸 점이 있는데, StreamWriter나 StreamReader를 사용 할 때에, 모든 입/출력을 통일하지 않으면 vs환경에서는 딱히 오류 없이 진행되나, 백준에서 검사할 때는 런타임 에러(Format) 이뜨게 되는 것 같다.

뭐든지 통일이 중요하다 싶다.