2017년 9월 25일 월요일

[C언어] 백준 2577번




















세개의 자연수 A,B,C가 주어질 때 A*B*C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성한다.

A,B와 C는 100보다 같거나 크고, 1,000보다는 작은 자연수이다
100 <= A,B,C<1000

나온 결과를 10으로 나누었을 때 나머지가 결국 해당 자리 숫자가 된다.
그러므로 우선 해당 숫자가 몇번 나왔는지 확인할 배열을 선언해준다.(크기는 10)
반복문은 결과 값이 0이 될 때까지 10으로 나누어준다.
그리고 반복문 안에 switch case문을 넣어서 해당 숫자가
나올 때마다 해당 배열에 1씩 증가 시켜준다.
ex) 1180을 10으로 나눈 값은 118이고 나머지는 0
그러면 0에 해당하는 배열[0]의 값을 1증가 시켜준다.
그렇게 해서 최종적으로 0보다 작아졌을 때 while문을 탈출하게 되고
배열에는 숫자의 개수 만큼 저장되어 있다.
마지막으로, 배열을 출력해준다.

C언어를 시작한지 3주정도 됐는데 어렵다.. 쉽지 않은 언어이고
이전에 자바를 조금 했고, 비주얼 베이직을 조금 배웠던 나는
나름 이해가 빠르다고 생각했는데 전혀[!] 아니라는 것을
깨달았고 더욱더 많은 공부가 필요하다는 것을 느낀다.
나와 같으신 분이 많을테니까 그분들과 내자신에게 격려의 박수를 보낸다.
문제 해결 시간 50분이상 소요...


#include <stdio.h>

int main(){
int a,b,c,cnt[10]={0,}; //입력받을 수 3개 a,b,c를 변수 선언.
int result=0; //결과 값을 저장할 변수 선언
scanf("%d %d %d", &a, &b, &c);
result = a*b*c;       //result에 결과 값 대입
while(result>0){
switch(result%10){
case 0 :
cnt[0]++;
break;
case 1 :
cnt[1]++;
break;
case 2 :
cnt[2]++;
break;
case 3 :
cnt[3]++;
break;
case 4 :
cnt[4]++;
break;
case 5 :
cnt[5]++;
break;
case 6 :
cnt[6]++;
break;
case 7 :
cnt[7]++;
break;
case 8 :
cnt[8]++;
break;
case 9 :
cnt[9]++;
break;
}
result /= 10;
}
int i = 0;
while(i<10){
printf("%d\n",cnt[i]);
i++;
}
return 0;
}

problem reference : https://www.acmicpc.net/problem/2577

댓글 없음:

댓글 쓰기

[Android] 이미지 위치 바꾸기 이벤트(ImageView, ScrollView)

Button x2(Up, Down) ImageView x2 ScrollView x2 구현하려하는 것은 이미지뷰를 위아래로 배치한 후 버튼을 눌렀을 때 이미지의 위치를 변경 ImageView imageView ; ...