백준 - 2

서희찬·2021년 5월 29일
0

백준

목록 보기
2/105
post-thumbnail

2577번 - 숫자의 개수


<코드>

#include <stdio.h>

int main(void)
{
    int a,b,c;
    int num,num2;
    int arr[10]={0,};
    
    scanf("%d %d %d",&a,&b,&c);
    num = a*b*c;
    
    while(num>0)
    {
        num2 = num%10;
        arr[num2]++; //증가
        num/=10; // 자릿수 다운
    }
    
    for(int i=0;i<10;i++)
    {
        printf("%d \n",arr[i]);
    }
    return 0;
}

얻은 점

정수의 자릿수를 쪼갤때는 나누기와 나머지 연산자를 활용하여 구할 수 있다.


다른 방법의 풀이도 생각해보자 !~


1546 : 평균

#include <stdio.h>


int main(void)
{
    int n,max;
    double arr[1000];
    double total=0;
    
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%lf",&arr[i]);
    }
    // 최댓값 구하기
    max = arr[0];
    for(int i=0;i<n;i++)
    {
        if(arr[i]>max)
        {
            max = arr[i];
        }
            
        
    }
    // 평균 구하기
    for(int i=0;i<n;i++)
        {
            arr[i]=(arr[i]/max*100);
            total+=arr[i];
        }
        
    total = total/n;
    printf("%lf",total);
    return 0;
}

얻은 점

배열 -> 요소별 접근 -> 배열 최대값 구하기 -> 평균으로 나타내기

8958 : OX퀴즈

#include <stdio.h>
#include <string.h>

int main(void)
{
    int num, score;
    int sum=0;
    char arr[80];
    
    scanf("%d", &num);
    
    for(int i=0;i<num;i++) // 루프문
    {
        sum=0;
        score =1 ;
        scanf("%s",arr);
        for(int j=0;j<strlen(arr);j++) // strlen활용 -> 문자열 길이 구하기 가능
        {
            if(arr[j]=='O') // 문자 나타낼때는 작은 따음표
            {
                sum+=score;
                score++;
            }
            if(arr[j]=='X')
                score=1; // 스코어 추가하고 아무것도 안더함 
        }
        printf("%d\n",sum);
    }
    return 0;
}

얻은 점

문자열 비교할때는 작은따움표다!!! 잊지말자 !
그리고 매 루프문마다 초기화해주는 방법도 항상 머리속에 두기

4344 : 평균은 넘겠지

#include <stdio.h>

int main(void)
{
    int c,n;// c: 테스트케이스 n: 학생수
    //테스트케이스 입력
    scanf("%d",&c);
    // 루프문 시작
    for(int i=0;i<c;i++)
    {
        int arr[1000];
        int sum=0;
        double avr=0.0;
        sum=0; // sum초기화
        // 학생 수 입력받기
        scanf("%d",&n);
        for(int j=0;j<n;j++)
        {
            //학생 별 점수 입력받기
            scanf("%d",&arr[j]);
            sum+=arr[j]; // i번째 테스트 학생 점수 총 합
        }
        avr=(double)sum/n; // 평균구하기
        int up=0;
        for(int k=0;k<n;k++)
        {
            if(arr[k]>avr)
                up++;
        }
        printf("%.3f%%\n",(double)up*100/n);
    }
    return 0;
}

얻은점

소수점 설정 -> %.3f 셋째자리까지 출력
소수점 쓰기위해 강제 double형으로 만들 수 있다.
(double)sum 같이 !
배열은 효율적으로 짜는게 중요하다 !

15596 : 정수 N개의 합

#include <stdio.h>

long long sum(int *a, int n)
{
    long long ans=0;
    for(int i=0;i<n;i++)
        ans+=a[i];
    return ans;
}

c++기준으로하고,,, main함수 넣어서 두번 컴파일 오류 떴다..

4673 : 셀프넘버

#include <stdio.h>
//셀프 넘버 = 생성자가 없는 숫자
int notSelfNumber(int n) //셀프넘어 아닌 숫자 구하는 함수
{
    int total = n;
    
    while(n>0) //n이 0이하로 가기전 까지 반복
    {
        total+=n%10; //나머지
        n/=10; //나누기
        ->100의자리,10의자리,1의자리 이렇게 더해가는 반복문이다. 
    }
    return total;
    
}


int main(void)
{
    int arr[10001], i,check;
    
    for(i=1;i<10001;i++)
    {
        
        check = notSelfNumber(i);
        if(check<10001)
            arr[check]=1; // 셀프넘버가 아닌 배열의 자리에 1을 저장한다.
    }
    for(i=1;i<10001;i++)
    {
        if(arr[i]!=1) //셀프넘버 아닌건 배제
            printf("%d\n",i);
    }
    
    return 0;
}

얻은점

10,000까지의 숫자를 배열을 활용해서 셀프넘버가 아닌 숫자에 1을 주는것과 같은 표시를 할 수 있다.
반복문을 활용해서 각자리의 숫자에 접근할 수 있다.

1065 : 한수

#include <stdio.h>
// 한수 : 각자릿수가 등차수열을 이룬다
void HanSoo(int n) //셀프넘어 아닌 숫자 구하는 함수
{
    int total = 99;
    int a,b,c;
    if(n<100)
    {
        printf("%d",n);
    }else
    {
    for(int i=100;i<=n;i++) // 100이하일때는 모두 성립한다.
    {
        a=i/100; //100의 자리수
        b=i/10%10; // 10의 자리수
        c = i % 10; // 1의 자리수
        
        if((b-a)==(c-b))
            total++;
    }
        printf("%d",total);
    }
}

int main(void)
{
    int n;
    scanf("%d",&n);
    HanSoo(n);
    return 0;
}
profile
부족한 실력을 엉덩이 힘으로 채워나가는 개발자 서희찬입니다 :)

0개의 댓글