![[Day2] goorm level 구름톤 챌린지_프로젝트 매니징](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc787Wm%2Fbtsq7bhXXfu%2F9zaLk4OYZe1ZFdwVtkKJTK%2Fimg.png)
문제 2. 프로젝트 매니징
정의
변수는 문제에 있는 그대로 정수로 N, T, M, 배열로 C를 정의했고 C에 담긴 모든 기능 개발 시간을 합해서 담을 정수 min도 정의했다. N의 범위가 1부터 최대 100까지라고 주어져서 각 기능 개발 시간을 담을 배열(C)의 크기를 100으로 임의 설정했다. 추후 동적으로 배열을 할당하는 방법도 고민해보고자 한다.
고민
C언어에서 동적 배열 할당하는 법을 까먹어서 구글링한 후에 적용했더니 테스트케이스에서 통과되지 않는..이슈가 있어서 일단은 깊이 고민하지 않고 임의로 크기를 설정한 배열을 사용했다. 입력 받는 부분에서는 크게 고민할 부분은 없었다. N, T, M 차례로 입력 받고 반복문으로 N 만큼 C 배열에 하나씩 입력을 받았고 이 반복문 안에서 min에 C[i] 를 하나씩 더해주는 것 정도로 끝났다. 분단위로 받은 C[i]를 다 합해서 시간계산하기에 편할 것이라고 생각해서 min 변수를 만들었던 것이다. 고민해봐야 했던 것은 연산 과정이었는데 23시 59분에서 1분이 지나면 0시 0분으로 돌아가야하는 것이 이 문제에서 중점적으로 다뤄야 하는 문제였다고 생각한다. 처음에는 단순히 분단위로 받은 min을 몫을 구하는 연산을 적용해서 T에 더하고, 나머지를 구하는 연산을 적용해서 M에 더하고 만약 시간이 23이 넘거나 분이 59가 넘으면 24를 빼주고 60을 빼주면 될 것이라고 생각했는데 그렇게 되면 예를 들어 72시간이 걸리는 경우일 때 시간에서 24를 한 번만 빼주면 48이 되기 때문에 빼기 연산이 아닌 T를 24로 나눈 나머지 연산으로 적용했다. 어느 정도 풀고 나서 맘에 안드는 점은 M 관련 계산 과정이었다.
M = M + min % 60;
if (M > 59)
{
T++;
M -= 60;
}
기존 M 값에 min%60을 더한 값이 59를 넘는 경우는 시간이 하나 늘어난 것이고 60을 한번만 빼주면 시간 계산이 맞게 되어서 위처럼 작성했는데 뭔가 불편했다. 더 좋은 방법이 있을텐데 싶은..사실 T와 M을 별개로 놓고 계산하고 싶었는데 분단위 나머지가 59보다 커질 경우 T를 1 증가시켜야 하는 과정 때문에 어쩔 수 없이 M 연산 과정에 의해 T가 영향을 받는 구조로 되었다.
M += min % 60;
T += min / 60;
if (M >= 60)
{
T += M / 60;
M %= 60;
}
if (T >= 24)
T %= 24;
결국 이 정도로 정리하고 마무리 하였다.
풀이
#include <stdio.h>
#include <stdlib.h>
int main()
{
int N, T, M = 0;
int C[100];
int min = 0;
scanf("%d", &N);
scanf("%d %d", &T, &M);
if (N < 1 || N > 100 || T < 0 || T > 23 || M < 0 || M > 59)
exit(1);
for (int i = 0; i < N; i++)
{
scanf("%d", &C[i]);
min += C[i];
if (C[i] < 0 || C[i] > 1000)
exit(1);
}
M += min % 60;
T += min / 60;
if (M >= 60)
{
T += M / 60;
M %= 60;
}
if (T >= 24)
T %= 24;
printf("%d %d", T, M);
return 0;
}
먼저 필요한 기능의 개수를 입력받은 후 현재 시간을 입력받는다. 해당 변수들의 범위 검증을 한번 해주고, 입력 받은 N 크기 만큼 배열 C에 개발 시간을 담으면서 min에 총합을 더한다. 이 과정에서도 C[i]가 0 이상 1000 이하인지 체크해준다. 이후 M에는 총 시간(분)을 60으로 나머지 연산 한 값을, T에는 몫 연산 한 값을 더해주는데 이때 M이 60 이상일 경우 T에 M/60을 더해주고 M에는 60 나머지 연산 한 값을 적용한다. T도 마찬가지로 24 이상일 경우 원래 시간대로 바꿔주기 위해 24 나머지 연산을 적용해준다. 이후 T, M 을 출력한다.
'구름톤 트레이닝 > 구름톤 챌린지' 카테고리의 다른 글
[Day8] goorm level 구름톤 챌린지_통증 (2) | 2023.08.23 |
---|---|
[Day7] goorm level 구름톤 챌린지_구름 찾기 깃발 (7) | 2023.08.22 |
[Day4] goorm level 구름톤 챌린지_완벽한 햄버거 만들기 (0) | 2023.08.17 |
[Day3] goorm level 구름톤 챌린지_합 계산기 (0) | 2023.08.16 |
[Day1] goorm level 구름톤 챌린지_운동 중독 플레이어 (0) | 2023.08.16 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!