WalkerJei's Lifelog

자녀 결혼순서 C# 본문

소프트웨어 개발/코딩테스트(자체 문제)

자녀 결혼순서 C#

WalkerJei 2025. 5. 2. 21:04

세부 정보

  • 문제명: 자녀 결혼순서
  • 언어: C#
  • 비고: 

 

문제

한 종가집이 있었다. 그 집안은 자식의 수가 많았다. 그리고 자식의 출생년도가 모두 달랐다. 아버지는 자식들을 태어난 순서대로 결혼시켜야 한다. 예를 들면 아들이 3명 있을 때 장남이 결혼을 못 하면 차남과 삼남도 결혼을 할 수 없고, 두 동생들은 장남에게 "형이 결혼 못하니까 내가 결혼 못하잖아!" 라는 식으로 압박을 가한다. 아버지는 자녀들을 빨리 태어난 순서대로 결혼시키려고 하는 만큼 결혼 순서를 알려줄 프로그램 소스 코드를 작성해보자

 

입력

첫째 줄에 자녀의 수 N(2 이상)이 자연수 형태로 주어진다.

둘째 줄부터 N개의 줄에는 자녀의 이름과 출생년도를 공백으로 구분해서 입력해야 한다. 자녀의 이름은 문자열로, 자녀의 출생년도는 자연수이다. 이 값들을 입력할 때 출생년도가 난잡하게 섞여 있을 수 있고 문제에서 말헀듯이 출생년도가 같은 경우는 없다.

 

출력

한 줄에 자녀의 결혼 순서를 먼저 태어난 순으로 출력한다.

 

예제 입력

4

송건실 2002

송건우 1999

송효주 2015

송건춘 2007

 

예제 출력:

송건우 -> 송건실 -> 송건춘 -> 송효주

 

풀이 펼쳐보기: 일단 먼저 자력으로 풀어보고 열어볼 것을 권한다.

더보기

풀이

DataTable을 사용해서 데이터베이스를 활용하듯이 C#을 다룰 수 있다.

DataView를 사용해서 DataTable을 정렬하는 등의 행위를 할 수 있다.

using System.Data;
using System.Text;

class MarryPriority
{
    static void Main(string[] args)
    {
        // 자녀의 정보를 저장할 데이터베이스
        DataTable childrenInfo = new DataTable();
        // 자녀의 이름을 문자열로 저장
        childrenInfo.Columns.Add("Name", typeof(string));
        // 자녀의 출생년도를 정수로 저장
        childrenInfo.Columns.Add("BirthYear", typeof(int));

        // 자녀의 수를 정수로 입력받는다
        // Console.Write("당신의 자녀 수를 입력하세요. ");
        int children = Convert.ToInt32(Console.ReadLine());

        // 자녀의 정보를 공백으로 구분해서 입력한다
        // Console.WriteLine("자녀 정보를 공백으로 구분해서 입력하세요.");
        // Console.WriteLine("이름 출생년도");
        for (int i = 0; i < children; i++)
        {
            string[] input = new string[2];
            // 문자열로 입력받은 자녀의 정보를 공백으로 구분해서 저장
            input = Console.ReadLine().Split();
            // 자녀의 정보를 데이터베이스에 입력한다.
            // 자녀의 이름은 문자열로, 출생년도는 정수로 바꿔서 저장한다.
            childrenInfo.Rows.Add(new object[] { input[0], Convert.ToInt32(input[1]) });
        }

        // 데이터 처리를 위한 데이터 뷰를 선언하고 처리할 데이터베이스를 가져온다
        DataView processor = new DataView(childrenInfo);
        // 데이터를 출생년도 기준으로 오름차순으로 정렬한다.
        processor.Sort = "BirthYear asc";
        // 정렬된 데이터를 다시 해당 데이터베이스에 덮어쓴다.
        childrenInfo = processor.ToTable();

        // 자녀의 결혼 순서를 저장한다.
        StringBuilder childrenMarryPriority = new StringBuilder();
        // Console.WriteLine("결혼 순서");
        // 첫째부터 끝에서 두 번째 자녀까지의 결혼 순서를 기록한다
        for(int i = 0; i < children - 1; i++)     
            childrenMarryPriority.Append(childrenInfo.Rows[i]["Name"] + " -> ".ToString());
        // 막내의 결혼 순서를 기록한다.
        childrenMarryPriority.AppendLine(childrenInfo.Rows[children - 1]["Name"].ToString());

        // 자녀의 결혼 순서를 출력한다. 먼저 태어난 자녀가 먼저 결혼하고 먼저 첫째를 가진다.
        Console.WriteLine(childrenMarryPriority);
    }
}

 

후기

주어지는 문제만 풀어보는 것으로 성이 안 차서 문제를 직접 만들어 보았다. 처음 자체 문제를 만들어 보았는데 해 보고 싶은 주제들로 문제를 만들어 보니까 찾아서 공부하는 재미도 있었다. 이거를 루틴처럼 할 지 좀 더 생각해 보겠다

'소프트웨어 개발 > 코딩테스트(자체 문제)' 카테고리의 다른 글

구매 가능한 활 C#  (0) 2025.05.09