181011
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void cleanBuf(void) {
while(getchar()!='\n');
}
int main() {
int T, n, m, *kd, i, *an;
char str[1024];
scanf("%d", &T); cleanBuf();
if(T<1||T>50) return -1; //변수 범위 검사
while(T--){
scanf("%[^\n]s", str); cleanBuf();
n = atoi(strtok(str, " "));
m = atoi(strtok(NULL, " "));
if(n<1||n>100000) return -1; //변수 범위 검사
kd = malloc(sizeof(int)*n);
an = malloc(sizeof(int)*n);
for(i=0;i<n;i++) an[i]=0;
scanf("%[^\n]s", str); cleanBuf();
kd[0] = atoi(strtok(str, " "));
for(i=1;i<n;i++){
kd[i] = atoi(strtok(NULL, " "));
}
while(m>0){
for(i=0;i<n;i++){
if(kd[i]!=0 && m>0){
an[i]++; kd[i]--;
m--;
printf("[%d] m:%d kd[%d]:%d an[%d]:%d\n", T, m, i, kd[i], i, an[i]);
}
}
}
printf("%d %d %d\n", an[0], an[1], an[2]);
free(kd); free(an);
}
}
이 문제도 어려운 편은 아니었는데, 더 효율적인 방법이 없을까하고 고민하다가 시간을 보냈다. 현재의 나한테는 이게 최선인 것 같다. 최적화는 되지 않아서 다음에 시간나면 최적화를 해봤으면 좋겠다.
인형의 종류별 개수를 계산하는 부분에서 잘못된 값이 나왔다. 조건문 부분에서 깊게 생각하지 않아 생긴 문제이다. 이중 반복문에 조건문까지 합하면 고려해야 할 조건들이 3가지 였는데, 각 조건들이 겹칠 모든 경우의 수를 생각하지 못하였다. while(m>0)안의 for이 독립적으로 반복될 때, n>m이고, m>0인 경우가 생겨 while이 완료되지 않고 계산되었다.
*n>m && m>0인 경우 효율적인 방안 생각해보았으면 한다.
인형의 종류별 개수를 계산하는 부분에서 잘못된 값이 나왔다. 조건문 부분에서 깊게 생각하지 않아 생긴 문제이다. 이중 반복문에 조건문까지 합하면 고려해야 할 조건들이 3가지 였는데, 각 조건들이 겹칠 모든 경우의 수를 생각하지 못하였다. while(m>0)안의 for이 독립적으로 반복될 때, n>m이고, m>0인 경우가 생겨 while이 완료되지 않고 계산되었다.
*n>m && m>0인 경우 효율적인 방안 생각해보았으면 한다.
*런타임 오류가 났다. 해결하고, 다시 올렸으면 좋겠다.
RTE (SIGSEGV: segmentation fault, probably incorrect memory access or stack overflow)
댓글 없음:
댓글 쓰기