이번 문제는 시간에 관한 문제이다.

시는 24시가 최대이고 분은 59분이 최대이다.

또한 두 값은 절대 -가 될 수 없다.

 

시는 h로 분은 m으로 변수를 지정한다.

m의 값에 -45를 해본 후 m의 값이 -로 떨어진다 하면 h-1 을 해주고 맨 처음 입력받은 m의 값에 (m-45) 한 값을 더해준다.

 

처음 작성했던 코드는 이것이다.

#include <stdio.h>
int main(){
    int h,m;
    scanf("%d %d",&h,&m);
    if((m-45)<0){
        h-=h;
        m=60+(m-45);
    }
    else
        m=m-45;
    
    printf("%d %d",h,m);
    return 0;
}

/*본 코드는 틀린 코드이다.*/

 

틀린 이유는

1. h-=h 는 다른 연산자이다. ( 이 이유는 세번째로 코드를 작성하고 틀린걸 알았다. ) 

2. 만약 h의 값이 0이라면 h의 값은  -로 떨어진다.

 

h의 값이 0인 경우엔 h의 값이 -1이 아닌 23이 되게 설정한다.

 

2번째로 작성한 코드이다.

#include <stdio.h>
int main(){
    int h,m;
    scanf("%d %d",&h,&m);
    if((m-45)<0){
        if(h=0)
            h=23;
        else
            h=h-1;
        m=60+(m-45);
    }
    else
        m=m-45;
    
    printf("%d %d",h,m);
    return 0;
}

/* 본 코드는 틀린코드이다 */

처음엔 여기서 틀린 이유를 찾지 못했다 (C를 배워놓고 진짜 오랫동안 안 했나보다...)

틀린 이유는 6번째 줄의 if(h=0) 때문이다.

h=0은 h의 값에 0을 대입한다는 뜻이다.

h가 0과 같다면의 의미로 작성하려면 h==0 으로 작성했어야 한다.

 

틀린 이유

1. h가 0일 경우 h-1를 하면 값이 -가 된다.

 

3번째로 작성한 코드이다.

#include <stdio.h>
int main() {
	int h, m;
	scanf("%d %d", &h, &m);
	if ((m - 45) < 0) {
		if (h == 0)
			h = 23;
		else
			h -= h;
		m = 60 + (m - 45);
	}
	else
		m = m - 45;

	printf("%d %d", h, m);
	return 0;
}

/*본 코드는 틀린 코드이다*/

사실 h = h-1로 썼다가 h=h-1를 대체할 수 있는 코드를 배웠던 것 같아서 써먹어보려고 했다.

그런데 h-=1 는 아니었던 것이다.

h = --h 였던 것.

 

자꾸 없는 언어 창조하지말자...

제발 있는 언어 쓰자...

 

그래서 최종적으로 수정해서 제출한 코드가

#include <stdio.h>
int main() {
	int h, m;
	scanf("%d %d", &h, &m);
	if ((m - 45) < 0) {
		if (h == 0)
			h = 23;
		else
			h = h-1;
		m = 60 + (m - 45);
	}
	else
		m = m - 45;

	printf("%d %d", h, m);
	return 0;
}

이 코드이다.

 

 

복사했습니다!