혜랑's STORY

[BOJ_C] 4673번, 16503번 본문

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

[BOJ_C] 4673번, 16503번

hyerang0125 2021. 2. 15. 14:02

#BOJ 4673번 : 셀프 넘버

문제

- 풀이

#include <stdio.h>
#define MAX 10000

int selfN(int x){
    int num = x;
    while(x!=0){
        num += x%10;
        x /= 10;
    }
    return num;
}

int main(){
    int flag[MAX] = {0,};
    
    for(int i=1; i<MAX; i++){
        if(selfN(i)<MAX)
            flag[selfN(i)] = 1;
    }

    for(int i=1; i<MAX; i++)
        if(!flag[i])
            printf("%d\n",i);

    return 0;
}

 

  1. 1부터 MAX(10,000)까지 selfN() 함수를 실행한다.
  2. selfN() 함수는 자기 자신(x)과 각 자릿수를 더하기 위해 10으로 나눈 나머지를 num에 더하고, x를 10으로 나눠주는 것을 x가 0이 될 때까지 반복한다.
  3. selfN() 함수가 반환한 숫자는 셀프넘버가 아니란 뜻이기 때문에 flag의 num 자리에 1을 대입해준다. (셀프 넘버가 아니란 뜻)
  4. flag의 각 자리의 값이 1이 아닐 경우 그 자리의 값(i)를 출력해준다.

 

- 실행결과

...

 

#BOJ 16503번 : 괄호 없는 사칙연산

문제

 

- 풀이

#include <stdio.h>

int calc(int x, int y, char op){
    switch (op)
    {
    case '+':
        return x+y;
    case '-':
        return x-y;
    case '*':
        return x*y;
    case '/':
        return x/y;     
    }
}

int main(){
    int n1, n2, n3;
    char op1, op2;

    scanf("%d %c %d %c %d",&n1, &op1, &n2, &op2, &n3);

    int result[2];
    result[0] = calc(n1, calc(n2, n3, op2), op1);
    result[1] = calc(calc(n1, n2, op1), n3, op2);

    if(result[0] > result[1])
        printf("%d\n%d",result[1], result[0]);
    else
        printf("%d\n%d", result[0], result[1]);
    
    return 0;

}

 

  1. calc() 함수는 입력받은 숫자와 연산자를 계산하여 반환한다.
  2. n1, n2를 연산한 뒤 그 결과를 n3과 하는 경우와 n2, n3을 연산한 뒤 그 결과를  n1과 연산하는 경우의 값을 저장한다.
  3. 저장된 값을 비교하여 더 작은 값부터 출력한다.

 

- 실행결과

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

[BOJ_C] 13235번, 2908번  (0) 2021.02.24
[BOJ_C] 1316번, 2869번  (0) 2021.02.08
[BOJ_C] 2748번, 2750번  (0) 2021.02.01
[BOJ_C] 2941번, 2884번  (0) 2021.01.23
[BOJ_C] 1037번, 1712번  (0) 2021.01.18