본문 바로가기
프로그래밍/CodeUp

CodeUp[Q_2041] : 회원들의 나이 차이

by 조원일 2020. 3. 27.
728x90

1. 문제

https://codeup.kr/problem.php?id=2041

 

회원들의 나이 차이

첫 번째 입력된 회원과 마지막 입력된 회원의 최소 나이 차이가 $1$년인 경우, $1 year$로 해야한다. (예: Hyunju is 1 year older than Minseok.) 최소 나이 차이가 $0$년인 경우, “No difference.”를 출력한다.

codeup.kr

[출처 : 코드업(https://codeup.kr/)]

이번 문제는 생일순으로 입력된 회원의 월과 일이 주어지면 가장 나이가 많은 회원과 어린 회원의 나이차를 구하는 문제입니다.

 

 

 

2. 풀이방법

STEP 1. n번째 회원의 "월"과 n+1번째 회원의 "월"을 비교
STEP 2. "월"이 같은경우 "일"을 비교

 

 

3. 해답

#ifdef _main

#include <stdio.h>

int month(char* Arr) {
	if (strcmp(Arr, "January") == 0) return 1;
	else if (strcmp(Arr, "February") == 0) return 2;
	else if (strcmp(Arr, "March") == 0) return 3;
	else if (strcmp(Arr, "April") == 0) return 4;
	else if (strcmp(Arr, "May") == 0) return 5;
	else if (strcmp(Arr, "June") == 0) return 6;
	else if (strcmp(Arr, "July") == 0) return 7;
	else if (strcmp(Arr, "August") == 0) return 8;
	else if (strcmp(Arr, "September") == 0) return 9;
	else if (strcmp(Arr, "October") == 0) return 10;
	else if (strcmp(Arr, "November") == 0) return 11;
	else if (strcmp(Arr, "December") == 0) return 12;
	else return 0;
}

int day(char* Arr) {
	int tmp = 0;

	for (int i = 0; i < strlen(Arr) - 2; i++) {
		tmp = (10 * tmp) + ((int)Arr[i] - 48);
	}
	return tmp;
}

int main()
{
	char name[100][51];
	char tmp1[15], tmp2[15];

	int n, c = 0;
	int arr[100][2];

	scanf("%d", &n);

	for (int i = 0; i < n; i++) {
		scanf("%s %s %s", name[i], tmp1, tmp2);
		arr[i][0] = month(tmp1);
		arr[i][1] = day(tmp2);
	}

	for (int i = 0; i < n - 1; i++) {
		// 먼저 입력한 회원의 월이 다음 회원의 월보다 느리면 
		if (arr[i][0] > arr[i + 1][0]) {
			c++;
		}
		// 같은 월에 태어났으면
		else if (arr[i][0] == arr[i + 1][0]) {
			// 먼저 입력한 회원의 일이 다음 회원의 일보다 느리면 
			if (arr[i][1] > arr[i + 1][1]) c++;
		}
	}

	if (c == 0) printf("No difference.");
	else if(c == 1) printf("%s is %d year older than %s.", name[0], c, name[n - 1]);
	else printf("%s is %d years older than %s.", name[0], c, name[n - 1]);

	return 0;
}