Post

내일배움캠프 사전캠프 JAVA 퀘스트 달리기반 2번

🚀 문제

  • 자판기 만들기
    • 사이다 1,700원
    • 콜라 1,900원
    • 식혜 2,500원
    • 솔의눈 3,000원
  • Map, Scanner 사용

🚀 정답

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.util.Map;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 1. 음료 설정 (불변 Map)
        Map<String, Integer> beverages = Map.of(
            "콜라", 1700,
            "사이다", 1200,
            "스포츠", 2000
        );

        // 2. 메뉴 출력
        System.out.println("=== 메뉴 ===");
        for (Map.Entry<String, Integer> entry : beverages.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue() + "원");
        }

        // 3. 사용자 입력 (음료 선택)
        Scanner scanner = new Scanner(System.in);
        System.out.print("원하는 음료를 입력하세요: ");
        String userChoice = scanner.nextLine();

        // 존재하는 음료인지 확인
        if (!beverages.containsKey(userChoice)) {
            System.out.println("없는 음료입니다.");
            return;
        }

        // 4. 사용자 입력 (투입 금액)
        System.out.print("돈을 입력하세요 (원): ");
        int coin = scanner.nextInt();

        int price = beverages.get(userChoice);

        // 5. 구매 가능 여부 판단
        if (coin >= price) {
            System.out.println(userChoice + " 구매 성공!");
            System.out.println("잔돈: " + (coin - price) + "원");
        } else {
            System.out.println("금액이 부족합니다.");
        }

        scanner.close();
    }
}

🚀 해석

  • import 구문

    1
    2
    
    import java.util.Map;
    import java.util.Scanner;
    
    • Map: 키와 값 쌍으로 데이터를 저장하는 자료구조를 사용하기 위해 필요
    • Scanner: 사용자 입력을 받기 위해 필요
  1. 음료 가격 설정

    1
    2
    3
    4
    5
    
    Map<String, Integer> beverages = Map.of(
        "콜라", 1700,
        "사이다", 1200,
        "스포츠", 2000
    );
    
    • MashMap 대신 Java 9 이상에서 제공하는 Map.of() 를 사용하면 코드를 더 간단하게 작성할 수 있다.
    • 단, Map.of()불변(immutable) 이기 때문에 이후 요소를 추가하거나 수정할 수 없다.
    1. Map.of() 는 최대 10쌍까지만 지원하므로
      그 이상을 넣고 싶다면 Map.ofEntries() 를 사용해야 한다.
    2. Java 8 이하에서는 사용할 수 없다.
  2. 메뉴 출력

    1
    2
    3
    4
    
    System.out.println("=== 메뉴 ===");
    for (Map.Entry<String, Integer> entry : beverages.entrySet()) {
        System.out.println(entry.getKey() + ": " + entry.getValue() + "원");
    }
    
    • entrySet() 으로 Map의 모든 항목을 반복
    • entry.getKey(): 음료 이름
    • entry.getValue(): 가격
  3. 사용자로부터 음료 이름 입력받기

    1
    2
    3
    
    Scanner scanner = new Scanner(System.in);
    System.out.print("원하는 음료를 입력하세요: ");
    String userChoice = scanner.nextLine();
    
    • Scanner 를 통해 콘솔로부터 사용자 입력 받기
    • 입력값을 userChoice 변수에 저장
  4. 음료 존재 여부 확인

    1
    2
    3
    4
    
    if (!beverages.containsKey(userChoice)) {
        System.out.println("없는 음료입니다.");
        return;
    }
    
    • 사용자가 입력한 음료가 Map 에 없으면 프로그램 종료
  5. 사용자로부터 금액 입력받기

    1
    2
    
    System.out.print("돈을 입력하세요 (원): ");
    int coin = scanner.nextInt();
    
    • 사용자가 투입할 금액을 입력
    • coin 변수에 저장
  6. 가격 비교 및 결과 출력

    1
    2
    3
    4
    5
    6
    7
    8
    
    int price = beverages.get(userChoice);
    
    if (coin >= price) {
        System.out.println(userChoice + " 구매 성공!");
        System.out.println("잔돈: " + (coin - price) + "원");
    } else {
        System.out.println("금액이 부족합니다.");
    }
    
    • 선택한 음료의 가격을 price 에 저장
    • 입력한 돈이 가격 이상이면 구매 성공, 잔돈 출력
  7. 마무리

    1
    
    scanner.close();
    
    • Scanner 객체 닫기 (자원 정리)