문제
풀이 과정
- 문제가 길지만 차근차근 읽어보면 핵심 조건은 2가지로 추려짐
- seller가 판 돈의 90퍼는 seller가 갖고 10퍼는 referral로 준다
- 주는 10퍼가 1미만이면 내가 갖는다 -> 0원으로 처리한다
- 이 조건을 수행하기 위해서는 enroll과 referral의 관계를 잇는 idx배열이 필요
- seller에서 enroll의 idx로 찾아가서 referral이 없을 때까지 반복 하면 됨
- 틀렸던 부분은
- answer 초기화 빠트린거
- idx 배열 초기화를 0으로 둬가지고 0인덱스를 찾을 때 잘못된 값을 선정하므로 -1로 초기화 해야 함
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
int* solution(const char* enroll[], size_t enroll_len, const char* referral[], size_t referral_len, const char* seller[], size_t seller_len, int amount[], size_t amount_len) {
int* answer = (int*)malloc(enroll_len * sizeof(int));
for (int i=0; i<enroll_len; i++) {
answer[i] = 0;
}
int idx[enroll_len];
for (int i=0; i<enroll_len; i++) {
if (strcmp(referral[i], "-") == 0) {
idx[i] = -1;
} else {
for (int j=0; j<enroll_len; j++) {
if (strcmp(referral[i], enroll[j]) == 0) {
idx[i] = j;
break;
}
}
}
}
for (int i=0; i<seller_len; i++) {
int seller_idx = -1;
for (int j=0; j<enroll_len; j++) {
if (strcmp(seller[i], enroll[j]) == 0) {
seller_idx = j;
break;
}
}
int total = amount[i] * 100;
while (seller_idx != -1) {
int vat = total * 0.1;
if (vat < 1) vat = 0;
answer[seller_idx] += total - vat;
total = vat;
seller_idx = idx[seller_idx];
}
}
return answer;
}