[시뮬레이션] C 프로그래머스 다단계 칫솔 판매 풀이

New Jenice!·2025년 1월 21일
0

Daily Algorithm

목록 보기
66/71
post-thumbnail

문제

풀이 과정

  • 문제가 길지만 차근차근 읽어보면 핵심 조건은 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;
}
profile
Embedded Software Engineer

0개의 댓글