보통 배열부분에서 접하는 문제인데 대부분의 사람들은 이 배열부분에서 짜증난다고 포기해 버리는 경우가 있는데 자세히 알아보면 생각보다
잔돈 계산 프로그램은 굉장히 쉬운 알고리즘이 라는점 !
문제 ) 거스름돈을 입력받아 가장 적절한 동전의 수를 계산하는 프로그램을 작성하시오
문제 알고리즘 ) 무작정 코딩하기에 앞서 생각을 잘해보자 일단 우리가 활용할수 있는 동전은
500원, 100원,50원,10원 까지이다 하지만 5원과 1원도 있다는 가정하에 총 6개의 동전 종류가 있다고 생각해보자
예를들어 마트에 갔는데 물건값이 2350원이 나왔는데 동전의 수를 가장 적게 쓸려면 어떻게 해야할까?
아마도 가장 큰단위인 500원 짜리를 낼수있는만큼 내고 (4개 =2천원 ) 나머지 금액 300원을 또다시 남은 단위중 가장 큰단위인 100원으로 나누고
다시 남은 50원을 다음으로 큰 단위인 50원으로 나누어서 계산하는 알고리즘이다
감히 조금 오는가요?
자 그럼 코드로 한번 천천히 따라가보자
소스 코드 )
#include<stdio.h>
main()
{
int coin[6] = { 500,100,50,10,5,1};
int change, i, count[6];
printf("거스름 돈을 입력하세요 :");
scanf("%d", &change);
for (i = 0; i < 6; i++) {
count[i] = change / coin[i];
change = change % coin[i];
printf("%d원 동전 = %d개\n",coin[i],count[i]);
}
}
해석 ) 막상 코드를 짜놓고 나면 엄청 짧은 코드에다 우선 동전 종류6개를 저장할 배열을 선언하고 그외 잔돈,동전의 개수, 반복횟수 등에 필요한 변수를 선언한다 여기까지는 정말 기본적인 부분이고 그 이후로 머리를 살짝 굴려야한다
아직 상장안한 코인 미리 공짜로 긁어 모아서 잭팟 터뜨리는 방법 👇
for문을 머릿속으로 디버깅 해보면 i=0일때 count[0] 에는 잔돈을 coin[1]=500 즉 500으로 나눈값 500원짜리 동전이 몇개가 사용되는지의 값이 저장된다
그리고 그다음줄에는 500원짜리를 사용하고 남은 잔돈의 값을 저장해야하기때문에 change % coin[1]; 예를들어 1300원이 잔돈이면 500원으로 나누고 남은300원이 남는다. 이후로 반복문의 i값이 연속해서 돌아가면 100원짜리로 나누고 남은값을 다시 나누고 1원짜리로 나눌때까지 계속 반복하고 끝이난다 .
결과창)
거스름 돈을 입력하세요 :1541
500원 동전 = 3개
100원 동전 = 0개
50원 동전 = 0개
10원 동전 = 4개
5원 동전 = 0개
1원 동전 = 1개
'기타 > it' 카테고리의 다른 글
아이폰 '이 액세서리는 지원되지 않을 수 있습니다. ' 해결 방법 (0) | 2019.02.22 |
---|---|
C언어 라이브러리 함수 getchar()에 대해 알아보자 (0) | 2019.02.12 |
c언어 1차원배열 오름차순 정렬 /소스코드 및 해결방법/정렬 (0) | 2019.02.06 |
c언어-조건문 나이에 따라 입장료 다르게 받는 프로그램 [문제풀이/ 소스코드 ] (0) | 2019.02.03 |
C언어 반복문, switch문, 학점 구하는 프로그램 (0) | 2019.01.31 |