본문 바로가기

백준 문제풀이/반복문

번외) for 문 예제 / 3중 for 문 C

 

안녕하세요.

이번에는 번외로 제가 문제 하나를 들고 왔습니다.

예제.hwp
0.01MB

다운받으셔도 되지만, 귀찮으니까 제가 캡처로 올리겠습니다.

 

 

네 이런 문제입니다.

각각 아침 점심 저녁 일당이 얼마인지 나와있고, 최대한의 효율을 뽑으려고 합니다. (최저시급도 안주는군요)

어떻게 해야 제일 많이 벌 수 있는지 한 번 코드를 짜 봅시다.

 

일단 경우의 수는 3P2 이므로 6가지겠군요.

 

A아침 B점심 C저녁 / A아침 B저녁 C점심 / ... / A저녁 B점심 C아침

 

이런식으로 되는데, 이걸 반복문 돌리면서 계산해주는 코드를 만들어야겠네요.

배열을 배우기 전이라면 조금 귀찮으실 수도 있겠습니다.

 

일단 저는 배열을 써서 풀어보겠습니다.

A[3] 해서 아침 점심 저녁 값 넣어주고 이런식으로 C도 넣어줍니다.

 

반복문을 3중으로 돌릴 건데요,

A[i] 

 B[j]

  C[k]

 

이런식을 돌리면서, 한 타임에 두 탕뛰는 일을 방지하기 위해 i 랑 j 랑 k 가 같지는 않은지 확인해줘야겠습니다.

 

 

 

코드를 짜면 이렇게 되겠군요.

 

#include <stdio.h>

int main()
{
	int A[3] = { 0 }, B[3] = { 0 }, C[3] = { 0 };
	int i = 0, j = 0, k = 0; 
	int mo = 0, lu = 0, di = 0, sum = 0; // 아침 점심 저녁 합

	for (i = 0; i < 3; i++)
		scanf("%d", &A[i]);
	for (i = 0; i < 3; i++)
		scanf("%d", &B[i]);
	for (i = 0; i < 3; i++)
		scanf("%d", &C[i]);

	sum = A[0] + B[1] + C[2]; // 초기 값 넣어줌

	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			if (j == i) // 중복 방지
				continue;
			for (k = 0; k < 3; k++)
			{
				if (k == i || k == j) // 중복 방지
					continue;
				if (A[i] + B[j] + C[k] >= sum)
					sum = A[i] + B[j] + C[k];
			}
		}
	}
	printf("%d", sum);
	return 0;
}

 

 

// 중복 방지라고 쓴 부분이 i 랑 j 랑 k 가 같은지 확인하는 부분이고, continue 는 이번 반복문을 건너 뛴다는 얘깁니다.

 

이해 안되시는 부분이 있거나 더 좋은 알고리즘을 조언해주실 분은 댓글 남겨주세요.

 

감사합니다.