안녕하세요.
이번에는 번외로 제가 문제 하나를 들고 왔습니다.
다운받으셔도 되지만, 귀찮으니까 제가 캡처로 올리겠습니다.
네 이런 문제입니다.
각각 아침 점심 저녁 일당이 얼마인지 나와있고, 최대한의 효율을 뽑으려고 합니다. (최저시급도 안주는군요)
어떻게 해야 제일 많이 벌 수 있는지 한 번 코드를 짜 봅시다.
일단 경우의 수는 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 는 이번 반복문을 건너 뛴다는 얘깁니다.
이해 안되시는 부분이 있거나 더 좋은 알고리즘을 조언해주실 분은 댓글 남겨주세요.
감사합니다.
'백준 문제풀이 > 반복문' 카테고리의 다른 글
백준 10951 C / 단계별로 풀어보기 - while 문 2 (0) | 2019.12.13 |
---|---|
백준 10952 C / 단계별로 풀어보기 - while 문 1 (0) | 2019.12.12 |
백준 10871 C / 단계별로 풀어보기 - for 문 11 (0) | 2019.12.09 |
백준 2439 C / 단계별로 풀어보기 - for 문 10 (0) | 2019.12.09 |
백준 2438 C / 단계별로 풀어보기 - for 문 9 (0) | 2019.12.09 |