안경잡이 구루루

백준 2577 ( 숫자의 개수 ) (오답노트)[ C programming ] 본문

C언어(C programming)/문제풀이(백준,BaekJoon)

백준 2577 ( 숫자의 개수 ) (오답노트)[ C programming ]

구루루(gururu) 2020. 6. 25. 23:31
반응형


(오답):

#include <stdio.h>
int main() {
	int a, b, c, mul,lum,cnt=0;
	char num[10] = { 0, };
	scanf_s("%d\n %d\n %d",&a,&b,&c);

	mul = a * b * c;
	while (mul > 0) {
		mul /= 10;
		cnt++;
	}

	for (int i = 0; i < cnt; i++) {
		lum = mul % 10;
		num[lum] += 1;
		mul = mul / 10;
	}
	for (int j = 0; j < 10; j++) {
		printf("%d\n", num[j]);
	}
}

오답인 코드는 다음과 같다.

숫자들을 최종으로 곱한 값 mul의 길이만큼 for 반복을 이용해 나머지값들을 배열의 각 자리에 1씩 더한다고 생각

그러나 결과값은 num[0]의 개수만 변하고 나머지는 전부 0으로 됨.

어디가 잘못된지 잘 모르겠다....


(정답):

#include <stdio.h>
int main() {
	int a, b, c, mul,lum;
	char num[10] = { 0, };
	scanf("%d\n %d\n %d",&a,&b,&c);

	mul = a * b * c;

	for (int i = 0; mul>0; i++) {
		lum = mul % 10;
		num[lum] += 1;
		mul = mul / 10;
	}
	for (int j = 0; j < 10; j++) {
		printf("%d\n", num[j]);
	}
}

완성된 코드는 위와 같다.

 

#include <stdio.h>
int main() {
	int a, b, c, mul,lum;
	char num[10] = { 0, };
	scanf("%d\n %d\n %d",&a,&b,&c);
    mul = a * b * c;

우선 숫자 입력값 a,b,c 과  입력값들의 최종값 mul, 그리고 1~9까지 숫자를 나타낼 lum의 자료형을 선언

각 숫자별 개수를 나타낼 num[10] 배열에 각각  0을 대입한다. 

scanf를 통해 입력값 3개를 받고 이것들의 최종값을 mul에 대입한다.

 

	for (int i = 0; mul>0; i++) {
		lum = mul % 10;
		num[lum] += 1;
		mul = mul / 10;
	}

for 반복문을 이용해 mul을 나눈 값의 몫이 존재할때 까지 1~9까지의 숫자를 배열에 맞는 위치에 1씩 더해 개수를 추가

이때 %10을 통해 뒤에서 부터 한자리씩 숫자를 구하는 방법을 사용.

10까지 배열을 만들었기 때문에 배열위치와 %10으로 구한 나머지의 숫자와 일치한다.

+) for 반복문에는 꼭 i 만을 이용할 필요 없이 mul >0 같이 여러가지 응용이 가능함을 잊지말자

 

	for (int j = 0; j < 10; j++) {
		printf("%d\n", num[j]);
	}
}

각 배열에 해당하는 값은 각 숫자의 개수를 나타낸것과 같으니 0~9까지 for 반복문을 이용해 각 배열의 값을 한줄씩

간격을 두고 출력한다.

반응형