SWEA/[D2]

[C언어] SWEA 1926 간단한 369게임

ruming 2020. 7. 19. 07:26

9999이하의 자연수를 배열에 각각 한자리씩 집어넣기 -> 더 효율적인 방법 찾아보기

num[0] = i/1000; 
num[1] = i/100%10;
num[2] = i/10%10;
num[3] = i%10;

+이건 반복문을 이용하면 된다.

 

각 자릿수에 따라 출력

예) 두자릿수 : num[2], num[3]출력

출력시 369구분해서 -나 자릿수 그대로 출력

//SWEA1926 간단한 369게임 
#include <stdio.h>
int main(void){
	int n, i, j; 
	int num[4] = {0};
	
	scanf("%d", &n);
	for(i=1; i<=n; i++){
		num[0] = i/1000;
		num[1] = i/100%10;
		num[2] = i/10%10;
		num[3] = i%10;
		if(i>=1 && i<10){
			if(num[3]==3||num[3]==6||num[3]==9)	printf("-");
			else	printf("%d", num[3]);
		}
		else if(i>=10 && i<100){
			for(j=2; j<4; j++){
				if(num[j]==3||num[j]==6||num[j]==9)	printf("-");
				else	printf("%d", num[j]);
			}
		}else if(i>=100 && i<1000){
			for(j=1; j<4; j++){
				if(num[j]==3||num[j]==6||num[j]==9)	printf("-");
				else	printf("%d", num[j]);
			}
		}else{
			for(j=0; j<4; j++){
				if(num[j]==3||num[j]==6||num[j]==9)	printf("-");
				else	printf("%d", num[j]);
			}
		}
		printf(" ");
	}
	return 0;
}

아무래도 전에 풀 때 문제를 잘못 이해한 거 같은데 3- 이런식으로 출력하면 안되고 박수 한번은 -만 출력해야 된다. 

 

그래서 다시 풀어봤다.

N의 범위가 1000까지이므로 박수는 최대 3번이다. 각 숫자가 3,6,9인지 아닌지 판단 후 박수가 몇번인지 구분해서 출력하면 된다.

#include <stdio.h>
int main(void) {
    int N, ck, n[4] = { 0 }, tmp;
    scanf("%d", &N);
    for (int i = 1; i <= N; i++) {
        ck = 0;
        tmp = i;	//tmp를 사용하지 않으면 i가 바뀌기 때문에 곤란함
        for (int j = 0; j < 4; j++) {	//배열에 각 자릿수 넣기
            n[j] = tmp % 10;
            tmp /= 10;
        }
        for (int j = 0; j < 4; j++) {	//3,6,9가 들어가는지 확인
            if (n[j] == 3 || n[j] == 6 || n[j] == 9) {
                ck++;	//몇 개 들어가는지 세기
            }
        }
        if (ck == 1)	printf("- ");
        else if (ck == 2)	printf("-- ");
        else if (ck == 3)	printf("--- ");
        else	printf("%d ", i);
    }
	return 0;
}

형식을 안지우고 제출할 때 인풋으로 N이 아니고 T가 들어가서 cin>>T; 를 지워줘야한다;; 

각 자릿수를 배열에 넣을 때는 반복문을 이용하면 된다. 단 i를 사용하므로 tmp변수에 i값을 복사해서 tmp로 계산해줬다. 이렇게 넣으면 1의 자리 숫자부터 배열에 들어가는데 여기서는 순서가 상관없다. 다음 반복문에서 각 자릿수에 3, 6, 9가 몇 개 들어가는지 세서 ck에 저장한다. ck의 수만큼 -를 출력하고 ck가 0이면 그냥 숫자를 출력한다.