728x90

문제1)

세개의 정수를 인자로 전달받아서 그 중 가장 큰 수를 반환하는 함수와 가장 작은 수를 반환하는 함수를 정의해보자. 그리고 이 함수들을 호출하는 적절한 main함수도 작성해보자

#include <stdio.h>
int big(int num1,int num2, int num3){
    int bigger;
    if(num1>=num2){
        bigger=num1;
        if(bigger<num3){
            bigger=num3;
        }
    }
    else{
        bigger=num2;
        if(bigger<num3){
            bigger=num3;
        }
    }
    return bigger;
}
int small(int num1, int num2, int num3){
    int smaller;
    if(num1<=num2){
        smaller=num1;
        if(smaller>num3){
            smaller=num3;
        }
    }
    else{
        smaller=num2;
        if(smaller>num3){
            smaller=num3;
        }
    }
    return smaller;
}

int main(void){
    int a,b,c;
    scanf("%d %d %d", &a, &b,&c);
    printf("%d\n", big(a, b, c));
    printf("%d", small(a,b,c));
    return 0;
}

함수짜는 것을 활용하기 위해 big와 small을 통해 큰수, 작은수를 구해주는 함수를 만들어 주었다. 그리고 비교를 해주는 것을 넣어주었다. return 값은 바로 함수에서 완성되는 숫자로 리턴을 시켜준다. 이를 위해 메인함수에서 값을 3개를 전달해주었다.

 

문제2) 섭씨 온도를 입력하면 화씨 온도를 반환하는 CelToFah라는 이름의 함수와 그 반대로 화씨 온도를 입력하면 섭씨 온도를 반환하는 FahToCel라는 이름의 함수를 정의하고이 두 함수를 호출하는 예제를 완성해보자. 참고로 섭씨와 화씨간 온도 변환의 공식은 다음과 같다.

Fah=1.9*Cel+32

#include <stdio.h>
double CelToFah(double CTF1){
    return 1.8*CTF1+32;
}
double FahToCel(double FTC2){
    return (FTC2-32)/1.8;
}
int main(void){
    int num;
    printf("섭씨->화씨: 1 , 화씨-> 섭씨:2");
    scanf("%d", &num);
    if(num==1){
        double CTF;
        printf("섭씨 온도를 입력하세요");
        scanf("%lf", &CTF);
        printf("%f", CelToFah(CTF));
    }
    else if(num==2){
        double FTC;
        printf("화씨 온도를 입력하세요");
        scanf("%lf", &FTC);
        printf("%f", FahToCel(FTC));
    }
}

이것은 생각보다 간단하다. 어떤 것을 할 건지 선택하는 것을 메인함수 만들고 if 함수를 통해 받는다.

그리고 온도 입력받아서 변환을 해주는 것이 필요하다. 이것은 소수점이 나올 수 있다.

그래서 이를 위해 double형으로 입력을 받는다. 저장은 lf로 해주고 출력은 f로 해주면 된다.

이외의 내용들은 함수 다룰때 배웠던 것이라 큰 문제가 되지 않았다.

 

 

문제3)

인자로 전달된 수 만큼의 피보나치 수열을 출력하는 함수를 정의해보자. 예를 들어서 프로그램 사용자가 5를 입력하면 0에서부터 시작해서 총 5개의 피보나치 수열을 출력해야 한다. 참고로 피보나치 수열은 다음과 같다.

0,1,1,2,3,5,8,13,21,34

이렇듯 피보나치 수열은 0과 1에서 시작한다. 그리고 세번째 이후의 수열부터는 이전이 두 값의 합으로 구성된다. 즉 세번째 수는 0과 1의 합으로 이뤄져서 1이 되고, 네번째 수는 1과 1의합으로 이뤄져서 2가 된다.

#include <stdio.h>
int N,i;
int fib(int N1){
    scanf("%d", &N);
    int num[N]={0,1,};
    for(i=0;i<N;i++){
        if(i<=1) {
            printf("%d ", num[i]);
            
        }
        else{
            num[i]=num[i-2]+num[i-1];
            printf("%d ", num[i]);
            
        }
        
    }
    return num[i];
}
int main(void){
    fib(N);   
    return 0;
}

여기서는 배열을 사용했다. 배열을 알고 있는 상태라 이것을 활용했다. 0과 1도 저장하면서 차례대로 표현하기 위해서이다. 나머지는 일단 0으로 초기화 시키고 차례대로 더해주는 방식을 택했다. 이를 if else문으로 정의했다.

여기서는 함수를 정의하라고 했으므로 main에서 fib(N)을 통해 출력이 아닌 불러오기만 채택하였고 함수를 정의해  return 을 해주었다.

그러면 문제없이 진행이 될 수 있다.  

728x90
728x90

문제)

상근날드에서 가장 잘 팔리는 메뉴는 세트 메뉴이다. 주문할 때, 자신이 원하는 햄버거와 음료를 하나씩 골라, 세트로 구매하면, 가격의 합계에서 50원을 뺀 가격이 세트 메뉴의 가격이 된다.

햄버거는 총 3종류 상덕버거, 중덕버거, 하덕버거가 있고, 음료는 콜라와 사이다 두 종류가 있다.

햄버거와 음료의 가격이 주어졌을 때, 가장 싼 세트 메뉴의 가격을 출력하는 프로그램을 작성하시오.

 

입력)

입력은 총 다섯 줄이다. 첫째 줄에는 상덕버거, 둘째 줄에는 중덕버거, 셋째 줄에는 하덕버거의 가격이 주어진다. 넷째 줄에는 콜라의 가격, 다섯째 줄에는 사이다의 가격이 주어진다. 모든 가격은 100원 이상, 2000원 이하이다.

출력)

첫째 줄에 가장 싼 세트 메뉴의 가격을 출력한다.

 

예제1

800 700 900 198 330
848

예제2

1999 1999 100 189 100
150

 


https://www.acmicpc.net/problem/5543

 

5543번: 상근날드

입력은 총 다섯 줄이다. 첫째 줄에는 상덕버거, 둘째 줄에는 중덕버거, 셋째 줄에는 하덕버거의 가격이 주어진다. 넷째 줄에는 콜라의 가격, 다섯째 줄에는 사이다의 가격이 주어진다. 모든 가

www.acmicpc.net

문제는 위 링크에서 볼 수 있습니다.

 

이 문제는 if문을 어떻게 구성하는지가 중요한 문제라고 생각이 듭니다.

그리고 놓치지 말아야 하는 문제의 핵심부분까지 챙겨야 합니다.

 

#include <stdio.h>

int main(void){
    int L,M,S;
    int coke, cider;
    int bs, ds;
    scanf("%d\n %d\n %d\n %d\n %d", &L, &M, &S, &coke, &cider);
    if(L>=M){
        bs=M;
        if(bs>=S){
            bs=S;
        }
    }
    else if(L<M){
        bs=L;
        if(bs>=S){
            bs=S;
        }
    }
    if(coke<cider){
        ds=coke;
    }
    else if(coke>=cider){
        ds=cider;
    }
    printf("%d", bs+ds-50);
}

푸는 방법은 크게 어렵지 않습니다.

버거부분 끼리 비교하고 음료끼리 비교하는 것이

중요합니다.

 

좀더 짧게 짤수도 있을지 모르겠지만

제가 푼 것은 경우의 수를 다 따진 것입니다.

pass 부분 빼고는 다 작성하였습니다.

 

비교해서 더 작은 값을 bs(burger set), ds(drink set)라고

구분을 지어주었고 여기 문제에서

버거와 음료합치고 50원을 할인해준다고 했으므로

이 과정은 printf에서 해 주었습니다.

 

이 문제는 if문, 즉 조건문만 따질 줄 안다면

쉽게 풀리는 문제라는 생각이 들었습니다.

 

 

728x90
728x90

헛간 청약이라는 내용을 보고 처음에는 뭐지 하는 생각이 들었던 문제입니다.

그리고 조금 헤멨던 문제입니다.

먼저 헛간 청약의 문제 링크는 

https://www.acmicpc.net/problem/19698

 

19698번: 헛간 청약

$1 \le N, W, H, L \le 1,000$

www.acmicpc.net

여기에서 문제를 볼 수 있습니다.

#include <stdio.h>

int main(void){
    int N;
    int W,H;
    int L;
    int room,num;
    scanf("%d %d %d %d", &N, &W, &H, &L);
    room= (W/L)*(H/L);
    if(room>N) printf("%d", N);
    else printf("%d", room);
    return 0;
}

코드는 매우 짧습니다.

그렇게 꼬아진 코드는 아니기 때문입니다. 

그리고 저는 구분 쉽게 int를 4번 선언했지만 한줄로 줄일 수도 있습니다.

 

먼저 입력을 받아서 저장을 시킵니다.

그리고 들어가는 소의 개수를 구해야 합니다.

여기서 살짝 헤맸었는데 단순히 계산을 하면 안되는 문제였습니다.

 

처음에는 W*H-L*L을 하였습니다.

이것은 테스트 케이스에서도 값이 나오지 않습니다.

정사각형으로 이루어진다는 조건을 무시하였기 때문입니다.

 

그렇기 때문에 가로, 세로 각각 나누어 주는 것이 필요합니다.

그리고 if문을 써주어야 합니다.

소의 수가 헛간에 들어갈 수 있는 수보다 클 수도 있고

작을 수도 있기 때문입니다.

 

이 점을 고려해서 짜면 아주 짧게 코드를 짤 수 있습니다.

 

728x90

+ Recent posts