C

[C]백준 01.입출력과 사칙연산, 02.if문(2577, 10718, 10171, 10172, 1000, 1001, 10998, 1008, 10869, 10430, 2588/1330, 9498, 2753, 14681, 2884)

열지희공 2022. 1. 5. 06:40

백준 2557

내코드

#include <stdio.h>

int main(){
    printf("Hello World!");
    return 0;
}

 

백준 10718

 

내코드

#include <stdio.h>

int main(){
    printf("강한친구 대한육군\n");    
    printf("강한친구 대한육군\n");
    return 0;
}

 

백준 10171

내코드

#include <stdio.h>

int main() {
    printf("\\    /\\\n");
    printf(" )  ( ')\n");
    printf("(  /  )\n");
    printf(" \\(__)|\n");
    return 0;
}

c언어 특수문자 출력

특수문자 의미
\\ 역슬래시(\)출력
\' 작은따옴표(')출력
\" 큰따옴표(")출력
\? 물음표(?)출력

<출처:https://m.blog.naver.com/angelcorean/220804530449>

 

백준 10172

내코드

#include <stdio.h>

int main(){
    printf("|\\_/|\n");
    printf("|q p|   /}\n");
    printf("( 0 )\"\"\"\\\n");
    printf("|\"^\"`    |\n");
    printf("||_/=\\\\__|");
    return 0;
}

백준 1000

내코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    int a, b;
    scanf("%d", &a);
    scanf("%d", &b);
    printf("%d", a + b);
    return 0;
}

 

백준 1001

내코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    int a, b;
    scanf("%d", &a);
    scanf("%d", &b);
    printf("%d", a - b);
    return 0;
}

백준 10998

내코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    int a, b;
    scanf("%d", &a);
    scanf("%d", &b);
    printf("%d", a*b);
    return 0;

}

백준 1008

내코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    int a, b;
    double c;
    scanf("%d", &a);
    scanf("%d", &b);
    c = (double)a / b;
    printf("%.10lf", c);

    return 0;
}

정수의 연산 결과를 실수로 출력하려면 명시적 자료형 변환(type casting)이 필요하다.

또한 상대호차가 10^(-9) 이하이기 위해서는 소숫점 9자리까지 출력해야한다. 난 그냥 %.10lf로 소숫점 10자리까지 출력했다.

오랜만에 c언어를 사용하다보니 데이터타입과 형식지정자가 기억이 안나서 다시 공부했다.

포맷 타입 자료형 사용상황
%d 정수형 int int형의 정수를 출력하고 싶을때
%f 실수형 float float형의 실수를 출력하고 싶을때
%ld 정수형 long long형의 정수를 출력하고 싶을때
%lf 실수형 double double형의 실수를 출력하고 싶을때
%lld 정수형 long long long long형의 정수를 출력하고 싶을때
%llf 실수형 long double long double형의 실수를 출력하고 싶을때
%c 문자형 char char형의 문자를 출력하고 싶을때
%s 문자열형 char * 문자열을 출력하고 싶을때
%x 정수형 정수형 자료형 정수를 16진수로 출력하고 싶을때
%o 정수형 정수형 자료형 정수를 8진수로 출력하고 싶을때
%e 실수 지수형 실수형 자료형 실수를 지수표기법으로 표기하고 싶을때

<출처:https://jeckl.tistory.com/entry/C%EC%96%B8%EC%96%B4-4%EA%B0%95-scanf%ED%95%A8%EC%88%98%EC%99%80-printf%ED%95%A8%EC%88%98%EB%A1%9C-%EB%B3%80%EC%88%98-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0>

 

백준 10869

내코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    int a, b;
    scanf("%d", &a);
    scanf("%d", &b);
    printf("%d\n",a+b);
    printf("%d\n",a-b);
    printf("%d\n",a*b);
    printf("%d\n",a/b);
    printf("%d\n",a%b);
    return 0;
}

백준 10430

내코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    int a, b, c;
    scanf("%d", &a);
    scanf("%d", &b);
    scanf("%d", &c);
    printf("%d\n", (a+b)%c);
    printf("%d\n",((a%c) + (b%c))%c);
    printf("%d\n",(a*b)%c);
    printf("%d\n",((a%c)*(b%c))%c);

    return 0;
}

백준 2588

내코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    int a;
    int x,y,z;
    int b;
    scanf("%d",&a);
    scanf("%d", &b);
    x = b / 100;
    y = (b - 100 * x) / 10;
    z = (b - 100 * x - 10 * y);
    printf("%d\n",a*z);
    printf("%d\n",a*y);
    printf("%d\n",a*x);
    printf("%d\n",a*b);
    return 0;
}

백준 1330

내코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    int a,b;
    scanf("%d %d",&a,&b);
    if(a>b){
        printf(">");
    }
    else if(a<b){
        printf("<");
    }
    else
        printf("==");
    return 0;
    
}

백준 9498

내코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    int a;
    scanf("%d",&a);
    if(a>=90){
        printf("A");
    }
    else if(a>=80 && a<=89){
        printf("B");
    }
    else if (a>=70 && a<=79){
        printf("C");
    }
    else if (a>=60 && a<=69){
        printf("D");
    }
    else
        printf("F");
    return 0;
}

백준 2753

내코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
        int a;
        scanf("%d", &a);
        int x, y, z;
        x = a % 4; 
        y = a % 100;
        z = a % 400;
        //x=0&&y!=0 |z=0
        if ((x == 0 && y != 0) | z == 0) {
            printf("1");
        }
        else
            printf("0");
        return 0;

}

백준 14681

내코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {

    int x;
    int y;
    scanf("%d", &x);
    scanf("%d", &y);
    if (x > 0 && y > 0) {
        printf("1");
    }
    else if (x < 0 && y > 0) {
        printf("2");
    }
    else if (x < 0 && y < 0) {
        printf("3");
    }
    else
        printf("4");
    return 0;
}

백준 2884

내코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {

    int h;
    int m;
    scanf("%d %d", &h, &m);
    int total;
    total = h * 60 + m;
    int final, finalh, finalm;
    final = (total - 45);
    if (final < 0) {
        final += 1440;
    }
    finalh = final / 60;
    finalm = final % 60;
    printf("%d %d", finalh, finalm);
    return 0;
}

 

풀이방법

주어진 시, 분을 분으로 변환하여 전체 분에서 45를 뺀 뒤 다시 시, 분 형태로 변환하는 방식으로 문제를 풀고자 했다. 전체 분이 45보다 큰 경우에는 별 문제가 생기지 않지만 전체 분이 45보다 작은 경우 출력 결과가 음수로 나오는 문제가 생겼다. 

해당 문제를 모듈러 연산을 통해(final=(total-45)mod1440) 해결하고 싶었으나 final = (total-45)%1440을 하니 total-45가 음수이면 나머지도 음수가 나오는 것이었다. c언어에서 %연산의 결과는 음수도 가능하다고 하다. 예를들어 (-5)%(3)의 결과는 -2이고, (-5)%(-3)의 결과는 -2이며, 5%(-3)의 결과는 2이다. 

아무튼 그래서 이문제에서는 입력값의 h가 24이상의 수가 입력되지 않을 것이기에 1440(=24*60)을 한번만 더해줘도 원래 의도했던 풀이방식인 모듈러 연산의 효과가 나왔다. 하지만 모듈러 연산의 효과가 제대로 나타나기 위해선 final = ((total - 45) % 1440) + 1440;

아래와 같이 코드를 고쳐야 할 것 같다. 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {

    int h;
    int m;
    scanf("%d %d", &h, &m);
    int total;
    total = h * 60 + m;
    int final, finalh, finalm;
    final = (total - 45);
    /*if (final < 0) {
        final += 1440;
    }
    */
    if (final < 0) {
		final = (final % 1440) + 1440;
	}
    finalh = final / 60;
    finalm = final % 60;
    printf("%d %d", finalh, finalm);
    return 0;
}