컴공댕이 공부일지

[c언어] 백준 (2577 숫자의 개수 / 13909 창문 닫기 ) 본문

문제 풀이/코딩 문제 풀이 모음

[c언어] 백준 (2577 숫자의 개수 / 13909 창문 닫기 )

은솜솜솜 2023. 3. 17. 01:14
728x90

1. 2577 숫자의 개수

브론즈 2

#include <stdio.h>

int main()
{
    int a=0;
    int b=0;
    int c=0;
    int num[10] = {0}; //배열 초기화
    scanf("%d %d %d", &a, &b, &c);
    
    int abc=a*b*c; //int의 최댓값 2147483647
    
    
    
    while(abc>0) {
        num[abc%10]++;
        abc/=10;
    }
    
    for(int i=0; i<10; i++) {
        printf("%d\n",num[i]);
    }
    
    return 0;
}

정말 쉬운 문제인데 계속 틀려서 뭔가 했는데 배열을 0으로 초기화했더니 깔끔하게 맞았다..... 우쒸.................

 

int num[10] = {0} 배열 다 0으로 초기화!

 

 

 

 

#2. 13909 창문 닫기

실버 5

 

정답코드

#include <stdio.h>


int main()
{
    int n=0;
    int window=0;
    scanf("%d", &n);
    
    int i=1;
    
    while(i*i<=n) {
        window++;
        i++;
    }
    
    printf("%d",window);
    
    return 0;
}

 결국 창문이 열려있는 경우는 제곱수의 창문이다. 그래서 걍 범위 안의 제곱수의 갯수를 더해주면 된다...

 

처음에 푼 방법은 시간초과가 나서 풀이는 맞는데 그럼 어떻게 풀어야할까 고민하다 서치해보고 제곱수 규칙을 알게되었다....ㅎ 쉬운 길을 어렵게 가고 있었네...

 

 

시간 초과난 코드

#include <stdio.h>

int divisor(int x) { //약수 개수 구하는 함수
    int count=0;
    
    for(int i=1; i<=x; i++) {
        if(x%i==0) {
            count++;
        }
    }
    return count;
}



int main()
{
    int n=0;
    int window=0;
    scanf("%d", &n);
    
    for(int i=1; i<=n; i++) {
        if(divisor(i)%2!=0) { 
            window++;
        }
    }
    
    printf("%d",window);
    
    return 0;
}

 

약수의 개수가 홀수이면, 열고 닫은 총 횟수또한 홀수번으로 창문이 열린 상태가 되므로 이렇게 풀었는데.. 시간초과가 나버렸다ㅠ 답은 맞게 나왔는데 힝...

728x90
Comments