혜랑's STORY

[BOJ_C] 1037번, 1712번 본문

2021 SISS 21기 활동/겨울방학 C

[BOJ_C] 1037번, 1712번

hyerang0125 2021. 1. 18. 13:10

# BOJ 1037번 : 약수

BOJ 1037번 문제

- 풀이

어떤 수 N의 진짜 약수가 "모두" 주어진다고 했다. 즉, 주어진 수들을 정렬 한 뒤, 가장 작은 수와 가장 큰 수를 곱해주면 어떤 수 N을 구할 수 있게 되는 것이다.

 

- 코드

#include <stdio.h>
#include <stdlib.h>

void mysort(int x[], int n);

int main(){
    int num;
    scanf("%d",&num);
    
    int* measure = (int*)malloc(sizeof(int)*num);
    for(int i=0; i<num; i++)
        scanf("%d",&measure[i]);
    mysort(measure, num);
    printf("%d", measure[0]*measure[num-1]);
    
}

void mysort(int x[], int n){

    for(int i=0; i<n; i++){
        for(int j=0; j<n-1; j++){
            if(x[j] > x[j+1]){
                int temp = x[j];
                x[j] = x[j+1];
                x[j+1] = temp;
            }
        }
    }
}

 

- 실행결과

BOJ_1037번 실행결과

 

# BOJ 1712번 : 손익분기점

BOJ 1712번 문제

 

- 풀이

처음 생각한 방법은 " A + B * 판매량 < C * 판매량 "이 만족될 때 까지 판매량을 1씩 증가시켜 주었다.

#include <stdio.h>

int main(){
    int A, B, C;
    int sale = 0;

    scanf("%d %d %d", &A, &B, &C);

    while(1){
        if(B >= C){
            sale = -1;
            break;
        }
        else if(A + B*sale < C*sale)
            break;
        
        sale++;
    }

    printf("%d", sale);
    return 0;
}

그러나 틀렸다는 결과를 얻게 되었고... 다른 방법을 생각해 보기로 하였다.

다시 생각한 풀이는 앞의 수식을 판매량에 대하여 정리한 뒤, 판매량을 얻어내는 것이었다. 정리한 결과 " A / (C - B) < 판매량 "이라는 것을 알아낼 수 있었고, 좌변 값에 1을 더하여 최초의 손익분기 점을 알아낼 수 있었다. 

 

- 코드

#include <stdio.h>

int main(){
    int A, B, C;

    scanf("%d %d %d", &A, &B, &C);

    if(B >= C)
        printf("-1");

    else
        printf("%d", A/(C - B) + 1);
        
    return 0;
}

 

- 실행결과

BOJ 1712번 실행결과

 

'2021 SISS 21기 활동 > 겨울방학 C' 카테고리의 다른 글

[BOJ_C] 1316번, 2869번  (0) 2021.02.08
[BOJ_C] 2748번, 2750번  (0) 2021.02.01
[BOJ_C] 2941번, 2884번  (0) 2021.01.23
[2021 겨울 C언어 2주차]  (0) 2021.01.14
[BOJ_C] 10809번, 10773번  (0) 2021.01.06