알고리즘 공부/CodeUp 문제풀이

코드업 3019:스케줄 정리(C)

티들 2023. 10. 6. 23:15

문제 설명

순서없이 적힌 스케줄 메모가 있다.

메모는 스케줄명, 연, 월, 일 의 형태로 구성되어 있다.

이 메모를 토대로 날짜가 빠른 순서로 정렬하여 출력하고자 한다.

만약 날짜가 동일한 경우 스케줄명의 사전식 순서로 오름차순 정렬한다.

 

입력

첫째줄에 데이터의 개수 n이 입력된다.(1<=n<=100)

그 다음줄부터 n개의 데이터가 스케줄명, 년, 월, 일 형태로 한 줄에 하나씩 입력된다. 스케줄명은 공백없이 알파벳소문자 99글자 이하, 년월일은 유효한 날짜만 입력된다.

 

출력

가장 먼저 해야 할 스케줄명부터 정렬하여  출력한다.

 

입력 예시

5

sleep 2014 05 23

golf 2014 06 02

travel 2015 11 22

baseball 2013 02 01

study 2014 05 23

 

출력 예시

baseball

sleep

study

golf

travel

 

나의 코드

#include <stdio.h>
#include <string.h>

typedef struct schedule	// 스케줄 구조체
{
    char name[100];
    int y, m, d;
    int rank;
} sched;

int main()
{
    int n, i, j;
    sched s[100];	// 구조체 선언
    scanf("%d", &n);

	// 구조체입력 받음 
    for (i = 0; i < n; i++)
        scanf("%s %d %d %d", s[i].name, &s[i].y, &s[i].m, &s[i].d);

    for (i = 0; i < n; i++)
    {
        for (j = i + 1; j < n; j++)
        {
        	// 년, 달, 일, 이름비교
            if (s[i].y > s[j].y ||
                (s[i].y == s[j].y && s[i].m > s[j].m) ||
                (s[i].y == s[j].y && s[i].m == s[j].m && s[i].d > s[j].d) ||
                (s[i].y == s[j].y && s[i].m == s[j].m && s[i].d == s[j].d && strcmp(s[i].name, s[j].name) > 0))
            {
            	// 자리 바꿈
                sched temp = s[i];
                s[i] = s[j];
                s[j] = temp;
            }
        }
    }
	
    // 순서대로 출력
    for (i = 0; i < n; i++)
        printf("%s\n", s[i].name);

    return 0;
}

 

문제 바로가기:https://codeup.kr/problem.php?id=3019&rid=0