본문 바로가기
코딩과 알고리즘

배수의 합 코딩 문제 풀이 - C++/php/C#/자바스크립트

문제조건

2자리 정수 중 6의 배수의 합을 구하되, 500을 초과하는 순간 break; 문을 사용하여 합의 계산을 중단하는 코딩을 작성하시오!

해설

코딩 문제 중에서는 상당히 머리를 써야 하는 추리성 코딩문제도 있지만,
입문자 입장에서 사용법을 익히는 수준의 코딩 풀이가 필요하여 쉬운 문제를 하나 가져왔습니다.

문제조건은 2가지인데요.
첫번째 조건은 2자리의 정수중 6의 배수의 합계를 구하는 것입니다.

배수의 합계를 구하려면 2개의 그릇이 필요한데요.

이 그릇을 프로그래밍에서는 '변수'라고 하지요.

첫 번째 그릇(변수)에는 12부터 시작해서 18, 24 등의 6의 배수에 해당하는 숫자를 연속해서 담을 것이고,
두 번째 그릇(변수)는 첫번째 그릇에 담긴 숫자를 계속해서 더해줄 합계를 담을 것입니다.

왜 12부터 시작하냐구요?
2자리의 정수라는 제약조건 때문입니다.
2자리의 정수 중 첫번째 6의 배수는 12이기 때문이지요.

우선 2자리의 숫자로 시작하는 정수를 반복할 for 문은 아래와 같습니다.

for(int i=12;i<=99;i+=6)
{
    :  // 안에 들어갈 코드를 작성
}

i라는 그릇, 즉 변수를 만들고, 6을 계속 더해주면서 99일때까지 진행합니다.
그리고 99보다 작거나 같을 때가 아니면, 즉 99를 초과해서 3자리 정수가 되면 for 문을 빠져나옵니다.

위 코드에 합계를 구하는 코드는 아래와 같은 부분이 추가되는데요.
먼저 합계를 담을 그릇, 변수를 먼저 정의해야 합니다. 초기값은 0을 반드시 입력해주어야 하는데요.
다른 언어의 경우 기본값이 0으로 초기화되므로 관계없으나, C나 C++언어는 꼭 0을 대입해 주어야 합니다.
하지만 기본적으로 어떤 언어에 사용하든 0을 넣어주는게 의미적으로는 맞습니다.

int tot=0;

그리고 for 반복문 내부에서 tot 에 변화하는 i 값을 계속 더해주는 것이지요.
tot+=i; 이 부분인데요. i 값을 tot 변수에 더해주어라~ 이런 의미입니다.

for(int i=12;i<=99;i+=6)
{
  tot+=i;
}

그러면 처음에는 12가 더해지고, 다음에는 18이 더해지고, 24, 32 이런식으로 합계가 계속 누적되는 것입니다.

tot=0;
합계 tot, 처음에는 0

tot+=i; // i가 12일 때
12를 더해줘! -> 합계 12 보관

tot+=i; // i가 18일 때
18를 더해줘! -> 합계 30 보관

tot+=i; // i가 24일 때
24를 더해줘! -> 합계 54 보관

    :

그리고 마지막에 합계를 찍어주시면 되지요. 이 경우 810이 나옵니다.

printf("%d", tot);

이제 2번째 조건을 넣을 차례입니다. 500을 넘어가는 순간 합계 산출을 중지하시오!
이 조건은 반복문 안에 넣어야 하는데요. 합계를 더해준 다음 바로 검사하는 조건을 추가하면 됩니다.

for(int i=12;i<=99;i+=6)
{
  tot+=i;
  if(tot>500)break;
}

if(tot>500)break; 라는 부분이 추가되었지요.
이 코드는 tot 합계 변수가 500이 넘어가는 순간 break;  문을 실행하여 for 문을 빠져나옵니다.

주의하실 부분은 아래 2개의 코드는 해석이 다르다는 점입니다.

if(tot>500)break;
if(tot>=500)break;

앞의 경우는 500을 초과하는 순간이고,
뒤의 경우는 500이상이 되는 순간입니다.

수학에서는 초과와 이상을 명확하게 취급하는데요.
500 이상이라면 500이 포함되는 조건이지만, 500 초과라면 500이 포함되지 않는 조건입니다.
코딩에서도 이 규칙이 명확하게 적용되니 주의가 필요한 부분입니다.

C++. php, c#, 자바스크립트 언어별로 코드를 싣습니다.

[C++]

int _tmain(int argc, _TCHAR* argv[])
{
	int tot=0;
	for(int i=12;i<=99;i+=6)
	{
		tot+=i;
		if(tot>500)break;
	}
	printf("%d", tot);
	getchar();
	return 0;
}

[php]

<?
$sum=0;
for($i=12;$i<=99;$i+=6)	
{
	$sum+=$i;
	if($sum>500)break;
}
echo $sum;
?>

[C#]

static void Main(string[] args)
{
    int tot = 0;
    for (int i = 12; i <= 99; i += 6)
    {
       tot += i;
       if (tot > 500) break;
    }
    Console.WriteLine(tot.ToString());
    Console.ReadKey();
}

[자바스크립트]

<script>
var tot=0;
for(i=12;i<=99;i+=6)
{
	tot+=i;
	if(tot>500)break;
}
document.write(tot);
</script>
반응형