KU COSE101 2017기말고사 2번 문제

1 minute read

             
2016 기출 1번 2번 3번 4번 5번  
2017 기출 1번 2번 3번 4번 5번  
2018 기출 1번 2번 3번 4번 5번 6번

컴퓨터 프로그램의 버전 정보는 일반적으로 다음과 같은 형태를 갖는다.

1.0.1

아주 작은 변화가 있다면 마지막 숫자를 하나 늘이고 상대적으로 큰 변화가 있을 때에는 중간 숫자를 하나 늘인다. 그리고 설계상의 중대한 변화가 있다면 가장 앞자리 숫자를 하나 늘인다.

경우에 따라서는 다음과 같이 마지막 숫자를 표시하지 않는 경우도 있다.

2.0

두 개의 version 정보가 주어져있을 때, 함수 compare_version() 는 두 개의 version 정보를 비교하여 왼쪽이 더 최신 정보인 경우 양의 정수를, 반대인 경우는 음의 정수를, 그렇지 않은 경우는 0 을 return 한다.

예를 들어 다음과 같다.

compare_version("0.0.2", "0.0.2") == 0
compare_version("1.0.3", "1.0.10") < 0
compare_version("1.2.0", "1.1.99") > 0
compare_version("2.3", "3.1.6") < 0

다음 함수를 완성하시오.

int compare_version(char* left, char* right) {

}

int main()
{
	char *va = "1.0.3";
	char *vb = "1.0.10";
	
	printf("%d",compare_version(va, vb));
}

예시코드
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int compare_version(char* left, char* right) {
	int l[4],r[4],i=0;
	char lef[30];
	char rig[30];
	
	strcpy(lef, left);
	strcpy(rig, right);
	
	char *temp = strtok(lef,".");
	
	l[i++]=atoi(temp);
	
	while(temp!=NULL){
		temp = strtok(NULL,".");
		l[i++] = atoi(temp);
	}
	
	temp = strtok(rig,".");
	i=0;
	r[i++]=atoi(temp);
	while(temp!=NULL){
		temp = strtok(NULL,".");
		r[i++] = atoi(temp);
	}
	
	for(i=0 ; i<3 ; i++){
		if(l[i]==r[i]) continue;
		if(l[i]>r[i]){
			return 1;
		}
		if(l[i]<r[i]){
			return -1;
		}
	}
	
	return 0;
}

int main()
{
	char *va = "1.0.3";
	char *vb = "1.0.10";
	
	printf("%d",compare_version(va, vb));
}
먼저, strtok 함수를 쓰기 위해 char* 형에서 char[] 형으로 변환시켜주자.
strtok로 .을 기준으로 분리 한 뒤, 각각의 숫자를 atoi를 이용하여 l[i]와 r[i]에 넣어준다.
그리고 비교를 하면 완성!

Comments