Machineboy空

クラスの継承 본문

Computer/Coding Test

クラスの継承

안녕도라 2025. 6. 3. 11:58

문제요약

주류 주문 나이 제한하기

 

https://paiza.jp/works/mondai/class_primer/class_primer__inheritance/edit?language_uid=c-sharp&t=bd98b11eb7eb64271b25d458cfe30ea5

 

ログイン

ログイン画面です。|ITエンジニア・プログラマ向け総合求職・学習サイト【paiza】

paiza.jp

 

見立てる(みたてる) お客さんをクラスに見立てること  
取り消す(とりけす) その注文は取り消されます  
かつ かつ、成年済のクラスには未成年のクラスの機能が全て備わっていることがわかります。 한편으로

난이도

B rank


풀이 포인트

  • virtual 과 override의 개념
  • get, set

REVIEW

 

계승의 개념을 이해하고 생성자 개념 제대로 이해하면서 짜기.

기초를 탄탄히.

 


CODE

using System;
using System.Collections.Generic;

class Customer
{
    public int Amount { get; protected set; }

    public Customer()
    {
        Amount = 0;
    }

    public virtual void TakeFood(int m)
    {
        Amount += m;
    }

    public virtual void TakeSoftDrink(int m)
    {
        Amount += m;
    }

    public virtual void TakeAlcohol(int m)
    {
        // 기본 Customer는 술을 마실 수 없음
    }
}

class Adult : Customer
{
    private bool drunk;

    public Adult() : base()
    {
        drunk = false;
    }

    public override void TakeFood(int m)
    {
        if (drunk)
        {
            m -= 200;
        }
        base.TakeFood(m);
    }

    public override void TakeAlcohol(int m)
    {
        drunk = true;
        Amount += m;
    }
}

class Program
{
    static void Main()
    {
        var input = Console.ReadLine().Split();
        int n = int.Parse(input[0]);
        int k = int.Parse(input[1]);

        List<Customer> customers = new List<Customer>();

        for (int i = 0; i < n; i++)
        {
            int age = int.Parse(Console.ReadLine());
            if (age < 20)
            {
                customers.Add(new Customer());
            }
            else
            {
                customers.Add(new Adult());
            }
        }

        for (int i = 0; i < k; i++)
        {
            var line = Console.ReadLine().Split();
            int index = int.Parse(line[0]) - 1;
            string type = line[1];
            int m = int.Parse(line[2]);

            if (type == "food")
            {
                customers[index].TakeFood(m);
            }
            else if (type == "softdrink")
            {
                customers[index].TakeSoftDrink(m);
            }
            else if (type == "alcohol")
            {
                customers[index].TakeAlcohol(m);
            }
        }

        foreach (var customer in customers)
        {
            Console.WriteLine(customer.Amount);
        }
    }
}