BOJ

[C] 백준 2851번: 슈퍼 마리오

야호호코코 2018. 7. 25. 17:55
반응형

 쉽지만 점수를 더하는 과정에서 조건을 정해줄 때 약간 헷갈릴 수도 있는 문제다. 나도 헷갈렸다.




정답 코드

#include <stdio.h>
#include <math.h>

int main() {

	int mush[10];
	int sum = 0;

	int i;

	for (i = 0; i < 10; i++) {
		scanf("%d", mush + i); 
	}
	

	for (i = 0; i < 10; i++) {

		if (abs(sum + mush[i] - 100) <= abs(sum - 100)) {
			sum += mush[i];
		}
		else {
			break;
		}

	}

	printf("%d", sum);

	return 0;

}


코드 설명


1. 10개의 버섯이 가지는 점수를 입력받는다.


2. 10개의 버섯으로 받을 수 있는 점수를 계산한다. 1번째 버섯부터 계산하는데, n번째 버섯을 먹었을 경우 100점과의 차이와 n-1번째까지 먹었을 경우(n이 1일 경우 안먹었을 경우) 100점과의 차이를 비교한다. 이 때 중요한 점은 절댓값으로 비교해야 된다. 만약 n번째 버섯을 먹었을 경우의 차이가 n-1번째까지 먹었을 경우보다 작거나 같으면 해당 점수를 더해준다.


3. 만약 해당 if문에서 거짓이 나오면 중간에 버섯을 먹는 것을 중단했으므로 더 이상 버섯을 먹을 수 없다. for문을 탈출한다.


4. 점수 총합을 출력한다.

반응형