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이면 그냥 숫자를 출력한다.
'SWEA > [D2]' 카테고리의 다른 글
[C언어] SWEA 1204 최빈수 구하기 (0) | 2020.08.15 |
---|---|
[C언어] SWEA 1284 수도요금경쟁 (0) | 2020.08.15 |
[C언어] SWEA 1970 쉬운 거스름돈 (0) | 2020.08.09 |
[C언어] SWEA 1989 초심자의 회문검사 (0) | 2020.08.09 |
[C언어] SWEA 1945 간단한 소인수분해 (0) | 2020.07.17 |