BOJ(백준)

[C언어] 백준 - if문 (1330, 9498, 2753, 14681, 2884)

ruming 2020. 8. 28. 05:09

#1330 두 수 비교하기

#include <stdio.h>
int main(void){
	int a, b;
    scanf("%d%d", &a, &b);
	if(a>b)	printf(">");
	else if(a<b)	printf("<");
	else	printf("==");
	return 0;
}

처음에 생각한거는 걍 평범하게 if문 사용하는 것.

#include <stdio.h>
int main(void){
	int a, b;
    scanf("%d%d", &a, &b);
	if(a==b)	printf("==");
	else	printf(a>b?">":"<");
	return 0;
}

숏코딩보니까 if문 안쓰고 puts(a>b?">":"<":"==");이런 방식이 있길래 따라해봤다.

근데 위에거 그대로는 안되길래 좀 바꿔서 씀

 

#9498 시험 성적

#include <stdio.h>
int main(void){
	int grade;
	scanf("%d", &grade);
	if(grade>=90&&grade<=100)	printf("A");
	else if(grade>=80&&grade<90)	printf("B");
	else if(grade>=70&&grade<80)	printf("C");
	else if(grade>=60&&grade<70)	printf("D");
	else	printf("F");
	return 0;
}

 

시험점수가 0~100점이라는 제한이 있으므로, 더 정교하게 만들자면 이런 식으로 할 수 있다.

#include <stdio.h>
int main(void){
	int score;
    while(1){
    	printf("Enter a score: ");
    	scanf("%d", &score);
        if(score>=0&&score<=100)	break;
        printf("0 <= grade <= 100\n");
        }
    printf("Grade: ");
	if(score>=90&&score<=100)	printf("A\n");
	else if(score>=80&&score<90)	printf("B\n");
	else if(score>=70&&score<80)	printf("C\n");
	else if(score>=60&&score<70)	printf("D\n");
	else	printf("F\n");
	return 0;
}

 

충격적인 숏코딩 (일부)

무슨 의미인지 모르겠다. 

printf("%c","FFFFFFDCBAA"[a/10]);

 

#2753 윤년

윤년 : 4의 배수이면서 100의 배수가 아니거나 400의 배수

예) 2012, 2000

#include <stdio.h>
int main(void){
	int year;
	scanf("%d", &year);
	if(!(year%4)){
		if((year%100!=0)||(year%400==0))	printf("1");
		else	printf("0");
	}else	printf("0");
	return 0;
}

시행착오 끝에 성공~!

year%4에 괄호 안썼다가 틀리고 두번째 if문 else 안줬다가 틀림

 

if문을 이중으로 쓰지 않고 해보려고 머리를 굴린 결과 (틀림)

#include <stdio.h>
int main(void){
	int year;
	scanf("%d", &year);
	if((year/4)%25!=0||(year/4)%100==0)	printf("1");
	else	printf("0");
	return 0;
}

이거는 되는지 궁금해서 해봄 (틀림)

#include <stdio.h>
int main(void){
	int year;
	scanf("%d", &year);
	printf((year/4)%25!=0||(year/4)%100==0?"1":"0");
	return 0;
}

식은 어떻게 더 줄이지

 

#14781 사분면 고르기

#include <stdio.h>
int main(void){
	int a, b;
	scanf("%d%d", &a, &b);
	printf(a>0?(b>0?"1":"4"):(b>0?"2":"3"));
	return 0;
}

겹쳐서 짜는 거 너무 힘들다... 머리 쥐어짜내기

 

여러가지 방법들 (맞음)

#include <stdio.h>
int main(void){
	int a, b;
	scanf("%d%d", &a, &b);
	if(a>0){
		if(b>0)	printf("1");
		else	printf("4");
	}else{
		if(b>0)	printf("2");
		else	printf("3");
	}
	return 0;
}
#include <stdio.h>
int main(void){
	int a, b;
	scanf("%d%d", &a, &b);
	if(a>0)	printf(b>0?"1":"4");
	else	printf(b>0?"2":"3");
	return 0;
}

 

#2884 알람 시계

시각을 입력하고 45분 적게 출력하는 문제

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

 

여러가지 시도들(실패)

#include <stdio.h>
int main(void){
	int a, b;
	scanf("%d%d", &a, &b);
//	printf("%d %d", a>0?(b>=45?a,b-45:a-1,b+15):(b>=45?a+23,b-45:a+23,b+15));
	if(a>0)	printf("%d %d", b>=45?a,b-45:a-1,b+15);
	else	printf("%d %d", b>=45?a,b-45:a+23,b+15);
	printf("%d", b>=45?a+b:a-b);
	return 0;
}