반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- VS
- 문제풀이
- 10807
- C 언어
- 문자열
- 코드엔진
- greedy
- 입문
- 백준
- 친절한 설명
- 설명
- C
- implement
- 파이썬
- 10926
- Beakjoon
- Python
- C Programming
- 그리디
- 초보
- 꾸준히
- 구현
- Baekjoon
- 정리
- CSS
- 알고리즘
- Implemention
- 심화1
- c언어
- HTML
Archives
- Today
- Total
안경잡이 구루루
백준 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 반복문을 이용해 각 배열의 값을 한줄씩
간격을 두고 출력한다.
반응형
'C언어(C programming) > 문제풀이(백준,BaekJoon)' 카테고리의 다른 글
백준 1546 ( 평균 ) [ C programming ] (0) | 2020.07.04 |
---|---|
백준 3052 ( 나머지 ) [ C programming ] (0) | 2020.06.30 |
백준 10818 ( 최소 , 최대 ) [ C programming ] (0) | 2020.06.15 |
백준 2562 ( 최대값 ) [ C programming ] (0) | 2020.06.08 |
백준 2446 ( 별 찍기 - 9 ) [ C programming ] (0) | 2020.06.02 |