알고리즘 공부/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;
}