Amenable
Amenable's Blog
Amenable
  • λΆ„λ₯˜ 전체보기 (189)
    • πŸ“‚ JAVA (87)
      • μ΄νŽ™ν‹°λΈŒ μžλ°” (65)
      • μ£Όμš” κ°œλ… (22)
    • πŸ“‚ 개발 μ„œμ  (22)
      • μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨Έ (1)
      • 객체지ν–₯의 사싀과 μ˜€ν•΄ (2)
      • 클린 μ½”λ“œ (8)
      • ν•¨κ»˜ 자라기 (1)
      • 그림으둜 λ°°μš°λŠ” HTTP&Network Basic (10)
    • πŸ“‚ λ°μ΄ν„°λ² μ΄μŠ€ (8)
      • κ°œλ… (8)
      • λ¬Έμ œν’€μ΄ (0)
    • πŸ“‚ λ„€νŠΈμ›Œν¬ (14)
      • κ°œλ… (6)
      • 성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리 (8)
    • πŸ“‚ μŠ€ν”„λ§ (13)
      • κΈ°λ³Έ κ°œλ… (13)
    • πŸ“‚ WEB (5)
    • πŸ“‚ 자료ꡬ쑰 (12)
      • κ°œλ… (2)
      • μ •λ ¬ (8)
      • 트리 (2)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜ (10)
      • μ΅œμ†Œμ‹ μž₯트리 (2)
      • μ΅œλ‹¨ 경둜 (2)
      • λ¬Έμžμ—΄ (2)
      • ETC (4)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜_λ¬Έμ œν’€μ΄ (4)
      • BOJ_λ°±μ€€ (4)
    • πŸ“‚ ν”„λ‘œκ·Έλž˜λ° (3)
    • πŸ“‚ DevOps (2)
      • 배포 (2)
    • πŸ“‚ ν›„κΈ° (8)
      • μš°μ•„ν•œ ν…Œν¬μ½”μŠ€(ν”„λ¦¬μ½”μŠ€) (4)
      • 2023λ…„ (3)
      • 2024λ…„ (1)
    • πŸ“‚ 회고 (1)
      • 2023λ…„ (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸš€ GitHub

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
Amenable

Amenable's Blog

ν”„λ¦¬μ½”μŠ€ 3μ£Όμ°¨(둜또 λ―Έμ…˜) - μš°μ•„ν•œ ν…Œν¬μ½”μŠ€
πŸ“‚ ν›„κΈ°/μš°μ•„ν•œ ν…Œν¬μ½”μŠ€(ν”„λ¦¬μ½”μŠ€)

ν”„λ¦¬μ½”μŠ€ 3μ£Όμ°¨(둜또 λ―Έμ…˜) - μš°μ•„ν•œ ν…Œν¬μ½”μŠ€

2022. 11. 24. 16:32

1. πŸ“ƒ λ―Έμ…˜ μ„€λͺ…

  3μ£Ό 차의 λ―Έμ…˜μ€ '둜또 κ²Œμž„'을 κ΅¬ν˜„ν•˜λŠ” 것이닀. 둜또 κ²Œμž„μ˜ 기본적인 κ·œμΉ™μ€ μ•„λž˜μ™€ κ°™λ‹€.

- 둜또 번호의 숫자 λ²”μœ„λŠ” 1~45κΉŒμ§€μ΄λ‹€.
- 1개의 둜또λ₯Ό λ°œν–‰ν•  λ•Œ μ€‘λ³΅λ˜μ§€ μ•ŠλŠ” 6개의 숫자λ₯Ό λ½‘λŠ”λ‹€. (둜또 1μž₯의 가격은 1,000원이닀.)
- 당첨 번호 좔첨 μ‹œ μ€‘λ³΅λ˜μ§€ μ•ŠλŠ” 숫자 6κ°œμ™€ λ³΄λ„ˆμŠ€ 번호 1개λ₯Ό λ½‘λŠ”λ‹€.
- 당첨은 1λ“±λΆ€ν„° 5λ“±κΉŒμ§€ μžˆλ‹€.
  - 1λ“±: 6개 번호 일치 / 2,000,000,000원
  - 2λ“±: 5개 번호 + λ³΄λ„ˆμŠ€ 번호 일치 / 30,000,000원
  - 3λ“±: 5개 번호 일치 / 1,500,000원
  - 4λ“±: 4개 번호 일치 / 50,000원
  - 5λ“±: 3개 번호 일치 / 5,000원

- μ‚¬μš©μžκ°€ κ΅¬λ§€ν•œ 둜또 λ²ˆν˜Έμ™€ 당첨 번호λ₯Ό λΉ„κ΅ν•˜μ—¬ 당첨 λ‚΄μ—­ 및 수읡λ₯ μ„ 좜λ ₯ν•˜κ³  둜또 κ²Œμž„μ„ μ’…λ£Œν•œλ‹€.

  μΆ”κ°€λœ μš”κ΅¬ 사항은 μ•„λž˜μ™€ κ°™λ‹€.

  1. ν•¨μˆ˜(λ˜λŠ” λ©”μ„œλ“œ)의 길이가 15라인을 λ„˜μ–΄κ°€μ§€ μ•Šλ„λ‘ κ΅¬ν˜„ν•œλ‹€.
  2. else μ˜ˆμ•½μ–΄λ₯Ό μ“°μ§€ μ•ŠλŠ”λ‹€.
  3. Java Enum을 μ μš©ν•œλ‹€.

 

2. πŸ“’ 곡톡 ν”Όλ“œλ°±

1) λ°œμƒν•  수 μžˆλŠ” μ˜ˆμ™Έ 상황에 λŒ€ν•΄ κ³ λ―Όν•œλ‹€.

  정상적인 경우λ₯Ό κ΅¬ν˜„ ν•œλŠ 것보닀 μ˜ˆμ™Έ 상황을 λͺ¨λ‘ κ³ λ €ν•΄ ν”„λ‘œκ·Έλž˜λ°ν•˜λŠ” 것이 더 μ–΄λ ΅λ‹€. μ˜ˆμ™Έ 상황을 κ³ λ €ν•΄ ν”„λ‘œκ·Έλž˜λ°ν•˜λŠ” μŠ΅κ΄€μ„ 듀인닀. 이번 과제의 μ˜ˆμ™Έ 상황은 μ•„λž˜μ™€ 같은 것듀이 μžˆλ‹€.

  • 둜또 κ΅¬μž… κΈˆμ•‘μ— 1000 μ΄ν•˜μ˜ 숫자λ₯Ό μž…λ ₯ν•˜λŠ” 경우
  • 당첨 λ²ˆν˜Έμ— μ€‘λ³΅λœ 숫자λ₯Ό μž…λ ₯ν•œ 경우
  • 당첨 λ²ˆν˜Έμ— 1 ~ 45 λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜λŠ” 숫자λ₯Ό μž…λ ₯ν•˜λŠ” 경우
  • 당첨 λ²ˆν˜Έμ™€ μ€‘λ³΅λœ λ³΄λ„ˆμŠ€ 번호λ₯Ό μž…λ ₯ν•˜λŠ” 경우

2) λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 UI λ‘œμ§μ„ λΆ„λ¦¬ν•œλ‹€.

  λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 UI λ‘œμ§μ„ ν•œ ν΄λž˜μŠ€κ°€ λ‹΄λ‹Ήν•˜μ§€ μ•Šλ„λ‘ ν•œλ‹€. 단일 μ±…μž„μ˜ 원칙에도 μœ„λ°°λœλ‹€.

public class Lotto{
    private List<Integer> numbers;
    
    // 둜또 μˆ«μžκ°€ ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
    public boolean contains(int number){
        ...
    }
    
    // UI 둜직
    private void print(){
        ...
    }
}

  ν˜„μž¬ 객체의 μƒνƒœλ₯Ό 보기 μœ„ν•œ 둜그 λ©”μ‹œμ§€ 성격이 κ°•ν•˜λ‹€λ©΄ toString()을 톡해 κ΅¬ν˜„ν•œλ‹€.

  Viewμ—μ„œ μ‚¬μš©ν•  데이터라면  getter λ©”μ„œλ“œλ₯Ό 톡해 데이터λ₯Ό μ „λ‹¬ν•œλ‹€.

 

3) 연관성이 μžˆλŠ” μƒμˆ˜λŠ” static final λŒ€μ‹  enum을 ν™œμš©ν•œλ‹€.

public enum Rank{
    FIRST(6, 2_000_000_000),
    SECOND(5, 30_000_000),
    THIRD(5, 1_500_000),
    FOURTH(4, 50_000),
    FIFTH(3, 5_000),
    MISS(0, 0);
    
    private int countOfMatch;
    private int winningMoney;
    
    private Rank(int countOfMatch, int winningMoney){
        this.countOfMatch = countOfMatch;
        this.winningMoney = winningMoney;
    }
}

 

4) final ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ κ°’μ˜ 변경을 λ§‰λŠ”λ‹€.

  μ΅œκ·Όμ— λ“±μž₯ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° 언어듀은 기본이 λΆˆλ³€ 값이닀. μžλ°”λŠ” final ν‚€μ›Œλ“œλ₯Ό ν™œμš©ν•΄ κ°’μ˜ 변경을 막을 수 μžˆλ‹€.

public class Money{
    private final int amount;
    
    public Money(int amount){
        ...
    }
}

 

5) 객체의 μƒνƒœ 접근을 μ œν•œν•œλ‹€

  μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ˜ μ ‘κ·Ό μ œμ–΄μžλŠ” private둜 κ΅¬ν˜„ν•œλ‹€.

public class WinningLotto{
    private Lotto lotto;
    private Integer bonusNumber;
    
    public WinningLotto(Lotto lotto, Integer bonusNumber){
        this.lotto = lotto;
        this.bonusNumber = bonusNumber;
    }
}

 

6) κ°μ²΄λŠ” 객체슀럽게 μ‚¬μš©ν•œλ‹€.

  Lotto ν΄λž˜μŠ€λŠ” numbersλ₯Ό μƒνƒœ κ°’μœΌλ‘œ κ°€μ§€λŠ” 객체이닀. 그런데 이 κ°μ²΄λŠ” λ‘œμ§μ— λŒ€ν•œ κ΅¬ν˜„μ€ ν•˜λ‚˜λ„ μ—†κ³ , numbers에 λŒ€ν•œ getter λ©”μ„œλ“œλ§Œμ„ κ°€μ§„λ‹€.

public class Lotto{
    private final List<Integer> numbers;
    
    public Lotto(List<Integer> numbers){
        this.numbers = numbers;
    }
    
    public int getNumbers(){
        return numbers;
    }
}

public class LottoGame{
    public void play(){
        Lotto lotto = new Lotto(...);
        
        // μˆ«μžκ°€ ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•œλ‹€.
        lotto.getNumbers().contains(number);
        
        // 당첨 λ²ˆν˜Έμ™€ λͺ‡ κ°œκ°€ μΌμΉ˜ν•˜λŠ”μ§€ ν™•μΈν•œλ‹€.
        lotto.getNumbers().stream()...
    }
}

Lottoμ—μ„œ 데이터λ₯Ό κΊΌλ‚΄μ§€(get) 말고 λ©”μ‹œμ§€λ₯Ό λ˜μ§€λ„λ‘ ꡬ쑰λ₯Ό λ°”κΏ” 데이터λ₯Ό κ°€μ§€λŠ” 객체가 μΌν•˜λ„λ‘ ν•œλ‹€.

public class Lotto{
    private final List<Integer> numbers;
    
    public boolean contains(int number){
        // μˆ«μžκ°€ ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•œλ‹€.
        ...
    }
    
    public int matchCount(Lotto other){
        // 당첨 λ²ˆν˜Έμ™€ λͺ‡ κ°œκ°€ μΌμΉ˜ν•˜λŠ”μ§€ ν™•μΈν•œλ‹€.
        ...
    }
}

public class LottoGame{
    public void play(){
        Lotto lotto = new Lotto(...);
        lotto.contains(number);
        lotto.matchCount(...);
    }
}

 

7) ν•„λ“œ(μΈμŠ€ν„΄μŠ€ λ³€μˆ˜)의 수λ₯Ό 쀄이기 μœ„ν•΄ λ…Έλ ₯ν•œλ‹€.

  ν•„λ“œ(μΈμŠ€ν„΄μŠ€ λ³€μˆ˜)의 μˆ˜κ°€ λ§Žμ€ 것은 객체의 λ³΅μž‘λ„λ₯Ό 높이고, 버그 λ°œμƒ κ°€λŠ₯성을 높일 수 μžˆλ‹€. ν•„λ“œμ— 쀑볡이 μžˆκ±°λ‚˜, λΆˆν•„μš”ν•œ ν•„λ“œκ°€ μ—†λŠ”μ§€ 확인해 ν•„λ“œμ˜ 수λ₯Ό μ΅œμ†Œν™”ν•œλ‹€.

  예λ₯Ό λ“€μ–΄ 총 μƒκΈˆ 및 수읡λ₯ μ„ κ΅¬ν•˜λŠ” λ‹€μŒ 객체λ₯Ό 보자.

public class LottoResult{
    private Map<Rank, Integer> result = new HashMap<>();
    private double profitRate;
    private int totalPrize;
}

  μœ„ 객체의 profitRate와 totalPrizeλŠ” λ“±μˆ˜ 별 당첨 λ‚΄μ—­(result)만 μžˆμ–΄λ„ λͺ¨λ‘ ꡬ할 수 μžˆλŠ” 값이닀. λ”°λΌμ„œ μœ„ κ°μ²΄λŠ” λ‹€μŒκ³Ό 같이 ν•˜λ‚˜μ˜ ν•„λ“œλ§ŒμœΌλ‘œ κ΅¬ν˜„ν•  수 μžˆλ‹€.

public class LottoResult{
    private Map<Rank, Integer> result = new HashMap<>();
    public double calculateProfitRate(){ ... }
    public int calculateTotalPrize(){ ... }
}

 

8) ν…ŒμŠ€νŠΈ μ½”λ“œλ„ μ½”λ“œλ‹€

  ν…ŒμŠ€νŠΈ μ½”λ“œλ„ μ½”λ“œμ΄λ―€λ‘œ λ¦¬νŒ©ν„°λ§μ„ 톡해 κ°œμ„ ν•΄λ‚˜κ°€μ•Ό ν•œλ‹€. 특히 반볡적으둜 ν•˜λŠ” 뢀뢄을 μ€‘λ³΅λ˜μ§€ μ•Šκ²Œ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€. 예λ₯Ό λ“€μ–΄ λ‹¨μˆœνžˆ νŒŒλΌλ―Έν„°μ˜ κ°’λ§Œ λ°”λ€ŒλŠ” 경우라면 μ•„λž˜μ™€ 같이 ν…ŒμŠ€νŠΈν•  수 μžˆλ‹€.

@DisplayNmae("μ²œμ› 미만의 κΈˆμ•‘μ— λŒ€ν•œ μ˜ˆμ™Έ 처리")
@ValueSource(strings = {"999", "0", "-123"})
@ParameterizedTest
void underLottoPrice(Integer input){
    assertThatThrownBy(() -> new Money(input))
                .isInstanceof(IllegalArgumentException.class);
}

 

9) ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ μ½”λ“œλŠ” κ΅¬ν˜„ μ½”λ“œμ—μ„œ λΆ„λ¦¬λ˜μ–΄μ•Ό ν•œλ‹€.

  ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ 편의 λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ μ½”λ“œμ— κ΅¬ν˜„ν•˜μ§€ 마라. μ•„λž˜μ˜ μ˜ˆμ‹œμ²˜λŸΌ ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜κΈ° μœ„ν•΄ κ΅¬ν˜„ μ½”λ“œλ₯Ό λ³€κ²½ν•˜κ±°λ‚˜ ν…ŒμŠ€νŠΈμ—μ„œλ§Œ μ‚¬μš©λ˜λŠ” λ‘œμ§μ„ λ§Œλ“€μ§€ μ•ŠλŠ”λ‹€.

  • ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ μ ‘κ·Ό μ œμ–΄μžλ₯Ό λ°”κΎΈλŠ” 경우
  • ν…ŒμŠ€νŠΈ μ½”λ“œμ—μ„œλ§Œ μ‚¬μš©λ˜λŠ” λ©”μ„œλ“œ

 

10) λ‹¨μœ„ ν…ŒμŠ€νŠΈν•˜κΈ° μ–΄λ €μš΄ μ½”λ“œλ₯Ό λ‹¨μœ„ ν…ŒμŠ€νŠΈν•˜κΈ°

  μ•„λž˜ μ½”λ“œλŠ” Random λ•Œλ¬Έμ— Lotto에 λŒ€ν•œ λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό ν•˜κΈ° νž˜λ“€λ‹€. λ‹¨μœ„ ν…ŒμŠ€νŠΈκ°€ κ°€λŠ₯ν•˜λ„λ‘ λ¦¬νŒ©ν„°λ§ ν•œλ‹€λ©΄ μ–΄λ–»κ²Œ ν•˜λŠ” 것이 μ’‹μ„κΉŒ?

public class Lotto{
    private List<Integer> numbers;
    
    public Lotto(){
        this.numbers = Randoms.pickUniqueNumbersInRange(1, 45, 6);
    }
}

-----------------------------------------

public class LottoMachine{
    public void execut(){
        Lotto lotto = new Lotto();
    }
}

  μ˜¬λ°”λ₯Έ 둜또 λ²ˆν˜Έκ°€ μƒμ„±λ˜λŠ” 것을 ν…ŒμŠ€νŠΈν•˜κΈ° μ–΄λ ΅λ‹€. ν…ŒμŠ€νŠΈν•˜κΈ° μ–΄λ €μš΄ 것을 클래슀 λ‚΄λΆ€κ°€ μ•„λ‹Œ μ™ΈλΆ€λ‘œ λΆ„λ¦¬ν•˜λŠ” μ‹œλ„λ₯Ό ν•΄λ³Έλ‹€.

public class Lotto{
    private List<Integer> numbers;
    
    public Lotto(List<Integer> numbers){
        this.numbers = numbers;
    }
}

-----------------------------------------

public class LottoMachine{
    public void execute(){
        List<Integer> numbers = Randoms.pickUniqueNumbersInRange(1, 45, 6);
        Lotto lotto = new Lotto(numbers);
    }
}

  이처럼 λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό ν•  λ•Œ ν…ŒμŠ€νŠΈν•˜κΈ° μ–΄λ €μš΄ 뢀뢄은 λΆ„λ¦¬ν•˜κ³  ν…ŒμŠ€νŠΈ κ°€λŠ₯ν•œ 뢀뢄을 λ‹¨μœ„ ν…ŒμŠ€νŠΈν•œλ‹€. ν…ŒμŠ€νŠΈν•˜κΈ° μ–΄λ €μš΄ 뢀뢄은 λ‹¨μœ„ ν…ŒμŠ€νŠΈν•˜μ§€ μ•Šμ•„λ„ λœλ‹€. 남은 LottoMachine을 μ–΄λ–»κ²Œ ν…ŒμŠ€νŠΈν•˜κΈ° μ‰½κ²Œ λ°”κΏ€ 수 μžˆλŠ”μ§€ κ³ λ―Όν•΄λ³Έλ‹€.

 

11) private ν•¨μˆ˜λ₯Ό ν…ŒμŠ€νŠΈν•˜κ³  μ‹Άλ‹€λ©΄ 클래슀(객체) 뢄리λ₯Ό κ³ λ €ν•œλ‹€.

  κ°€λ…μ„±μ˜ 이유만으둜 λΆ„λ¦¬ν•œ private ν•¨μˆ˜μ˜ 경우 publicμœΌλ‘œλ„ 검증 κ°€λŠ₯ν•˜λ‹€κ³  μ—¬κ²¨μ§ˆ 수 μžˆλ‹€. public ν•¨μˆ˜κ°€ private ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜κ³  있기 λ•Œλ¬Έμ— μžμ—°μŠ€λŸ½κ²Œ ν…ŒμŠ€νŠΈ λ²”μœ„μ— ν¬ν•¨λœλ‹€. ν•˜μ§€λ§Œ 가독성 μ΄μƒμ˜ 역할을 ν•˜λŠ” 경우, ν…ŒμŠ€νŠΈν•˜κΈ° μ‰½κ²Œ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν•΄λ‹Ή 역할을 μˆ˜ν–‰ν•˜λŠ” λ‹€λ₯Έ 객체λ₯Ό λ§Œλ“€ 타이밍이 μ•„λ‹Œμ§€ κ³ λ―Όν•΄ λ³Ό 수 μžˆλ‹€. 

 

3. πŸ’Š 배운 점 & λŠλ‚€ 점

  1. μœ„μ˜ 곡톡 ν”Όλ“œλ°±μ„ ν†΅ν•΄μ„œ μ•Œ 수 μžˆλŠ”  κ²ƒμ²˜λŸΌ κ°œμ„ ν•΄μ•Ό ν•  점이 μ•„μ£Ό λ§Žλ‹€. 특히 클래슀λ₯Ό μ–΄λ–»κ²Œ ν•˜λ©΄ 잘 λΆ„λ¦¬ν•˜λŠ”μ§€μ— λŒ€ν•œ ν•™μŠ΅μ΄ ν•„μš”ν•˜λ‹€.
  2. μ΄μ „κΉŒμ§€λŠ” enum을 λ‹¨μˆœ μ—΄κ±°ν•˜λŠ” ν˜•νƒœλ‘œ μ‚¬μš©ν–ˆλŠ”λ° 이번 기회λ₯Ό ν†΅ν•΄μ„œ enum을 클래슀처럼 μ‚¬μš©ν•˜λŠ” 방법을 읡힐 수 μžˆμ—ˆλ‹€. 

 

 

'πŸ“‚ ν›„κΈ° > μš°μ•„ν•œ ν…Œν¬μ½”μŠ€(ν”„λ¦¬μ½”μŠ€)' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

ν”„λ¦¬μ½”μŠ€ 4μ£Όμ°¨(닀리 κ±΄λ„ˆκΈ° λ―Έμ…˜) - μš°μ•„ν•œ ν…Œν¬μ½”μŠ€  (0) 2022.11.24
ν”„λ¦¬μ½”μŠ€ 2μ£Όμ°¨(숫자 야ꡬ κ²Œμž„ λ―Έμ…˜) - μš°μ•„ν•œ ν…Œν¬μ½”μŠ€  (0) 2022.11.24
ν”„λ¦¬μ½”μŠ€ 1μ£Όμ°¨(μ˜¨λ³΄λ”© λ―Έμ…˜) - μš°μ•„ν•œ ν…Œν¬μ½”μŠ€  (0) 2022.11.24
    'πŸ“‚ ν›„κΈ°/μš°μ•„ν•œ ν…Œν¬μ½”μŠ€(ν”„λ¦¬μ½”μŠ€)' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • ν”„λ¦¬μ½”μŠ€ 4μ£Όμ°¨(닀리 κ±΄λ„ˆκΈ° λ―Έμ…˜) - μš°μ•„ν•œ ν…Œν¬μ½”μŠ€
    • ν”„λ¦¬μ½”μŠ€ 2μ£Όμ°¨(숫자 야ꡬ κ²Œμž„ λ―Έμ…˜) - μš°μ•„ν•œ ν…Œν¬μ½”μŠ€
    • ν”„λ¦¬μ½”μŠ€ 1μ£Όμ°¨(μ˜¨λ³΄λ”© λ―Έμ…˜) - μš°μ•„ν•œ ν…Œν¬μ½”μŠ€
    Amenable
    Amenable
    CS, μžλ°”, 자료ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜, μŠ€ν”„λ§, μŠ€ν”„λ§ λΆ€νŠΈμ— ν•΄λ‹Ήν•˜λŠ” κ°œλ°œμ— κ΄€ν•œ λ‚΄μš©μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”