[BAEKJOON] 백준 29730: 임스의 데일리 인증 스터디 (C#)

2024. 10. 25. 16:30IT/BaekJoon

문제 링크

https://www.acmicpc.net/problem/29730

 

 

문제

취업 준비생 임스는 취업 준비를 하면서 그날그날 무슨 공부를 하였는지 기록하기 위해 데일리 인증이라는 스터디를 시작했다. 임스는 매일 무슨 공부를 하였는지 적으면서 몇 개의 규칙을 정했다.

  • 매일 꾸준히 백준 문제를 푼다.
  • 백준 문제를 하루 1문제 이상 풀었고, 그 외의 다른 공부는 0개 이상 진행하였다. 다른 공부들은 영어 대소문자, 숫자, 공백으로만 이루어진 최대 길이 100의 문자열이다.
  • 인증 기록으로는 백준 문제 링크를 제일 마지막에 작성하고, 그 외 학습 기록은 문자열 길이가 짧은 순으로 정렬해서 작성한다. 만약 문자열의 길이가 같다면, 사전 순으로 정렬한다.
  • 문자는 아스키코드 기준으로 비교한다.
  • 백준 문제 링크는 boj.kr/문제 번호 형식이다. 문제 번호가 작은 순서대로 정렬해서 작성한다. 문제 번호는 1 이상 30000 이하이다.

임스가 하루 동안 공부한 기록들이 정렬되지 않은 채로 주어졌을 때, 주어진 규칙에 맞게 정렬 후 출력한다.

 

 

입력

첫 번째 줄에는 임스가 하루동안 공부한 기록의 개수 N이 주어진다. (1≤N≤1000) 

다음 N개의 줄에 임스가 하루동안 공부한 기록들이 한 줄에 하나씩 주어진다.

학습 기록은 공백으로 시작하거나 끝나지 않는다. 같은 공부 기록이 여러 번 주어질 수도 있다.

 

 

출력

임스가 공부한 기록들을 주어진 규칙에 맞게 정렬 후 한 줄에 하나씩 출력한다.

 

 

 

통과한 답안

namespace _29730
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int N = int.Parse(Console.ReadLine());
            List<string> study = new List<string>();
            List<string> coding = new List<string>();

            for (int i = 0; i < N; i++)
            {
                string input = Console.ReadLine();
                if (input.Contains("boj.kr"))
                {
                    coding.Add(input);
                }
                else
                {
                    study.Add(input);
                }
            }

            var sortedStudy = study.OrderBy(x => x.Length)
                                   .ThenBy(x => x).ToList();
            var sortedCoding = coding.OrderBy(x => x.Length)
                                   .ThenBy(x => x).ToList();

            foreach (string str in sortedStudy)
            {
                Console.WriteLine(str);
            }

            foreach (string str in sortedCoding)
            {
                Console.WriteLine(str);
            }
        }
    }
}

 

N개의 문자열이 주어졌을 때, 해당 문자열들을 특정 조건에 맞게 정렬시키는 문제이다.

'boj.kr/문제번호'의 형식으로 주어지는 문자열은 백준 문제이고 그 외의 문자열은 다른 공부이다.

 

그 외의 문자열은 문자열의 길이가 첫 번째 기준이고 같은 길이라면 사전 순으로 정렬하여 출력하고

그 다음에 백준 문제는 문제 번호가 작은 순으로 정렬하여 출력하면 된다.

 

LINQ를 이용하여 정렬된 리스트를 만들었는데,

OrderBy(x => x.Length)를 통해서 각 문자열의 길이 순으로 정렬한 뒤에

ThenBy(x => x)를 통해서 사전 순으로 정렬하게 구현하였다.

백준 문제의 경우에도 같은 방법을 사용하여 문제 번호가 작은 순으로 정렬할 수 있다.