자료 구조 요리 레시피 메모장 만들기

김나영·2023년 6월 12일
0

Java 문법 종합반

목록 보기
10/21

자료구조 요리 레시피 메모장 만들기

  • 입력값
    • 저장할 자료구조명을 입력합니다. (List / Set / Map)
    • 내가 좋아하는 요리 제목을 먼저 입력합니다.
    • 이어서 내가 좋아하는 요리 레시피를 한문장씩 입력합니다.
    • 입력을 마쳤으면 마지막에 “끝” 문자를 입력합니다.
  • 출력값
    • 입력이 종료되면 저장한 자료구조 이름과 요리 제목을 괄호로 감싸서 먼저 출력 해줍니다.
    • 이어서, 입력한 모든 문장앞에 번호를 붙여서 입력 순서에 맞게 모두 출력 해줍니다.

ex) 입력 예시

Set
백종원 돼지고기 김치찌개 만들기
돼지고기는 핏물을 빼주세요.
잘익은 김치 한포기를 꺼내서 잘라주세요.
냄비에 들기름 적당히 두르고 김치를 넣고 볶아주세요.
다진마늘 한스푼, 설탕 한스푼 넣어주세요.
종이컵으로 물 8컵 부어서 센불에 끓여주세요.
핏물 뺀 돼지고기를 넣어주세요.
된장 반스푼, 양파 반개, 청양고추 한개를 썰어서 넣어주세요.
간장 두스푼반, 새우젓 두스푼, 고춧가루 두스푼반 넣어주세요.
중불로 줄여서 오래 끓여주세요~!!	
마지막에 파 쏭쏭 썰어서 마무리하면 돼요^^

예시 출력

[ Set 으로 저장된 백종원 돼지고기 김치찌개 만들기 ]
1. 돼지고기는 핏물을 빼주세요.
2. 잘익은 김치 한포기를 꺼내서 잘라주세요.
3. 냄비에 들기름 적당히 두르고 김치를 넣고 볶아주세요.
4. 다진마늘 한스푼, 설탕 한스푼 넣어주세요.
5. 종이컵으로 물 8컵 부어서 센불에 끓여주세요.
6. 핏물 뺀 돼지고기를 넣어주세요.
7. 된장 반스푼, 양파 반개, 청양고추 한개를 썰어서 넣어주세요.
8. 간장 두스푼반, 새우젓 두스푼, 고춧가루 두스푼반 넣어주세요.
9. 중불로 줄여서 오래 끓여주세요~!!	
10. 마지막에 파 쏭쏭 썰어서 마무리하면 돼요^^

풀이

Scanner sc = new Scanner(System.in);
String CollectionName = sc.nextLine();
String title = sc.nextLine();
  • Scanner로 입력 값 받기

  • 문자를 입력 받아야 하기 때문에 String

  • 띄어쓰기를 포함해야 하므로 sc.nextLine()으로 입력값 받기

1. List 타입

switch (CollectionName) {
   case "List":
       ArrayList<String> strList = new ArrayList<>();
       while (true) { // 한줄씩 입력받아서 strList 에 저장
           String text = sc.nextLine();
           if (Objects.equals(text, "끝")) {
               break;
           }
            strList.add(text);
       }
  • CollectionName을 기준으로 switch

  • ArrayList 생성(입력받아야 하는 값 : String)

  • while문 사용

  • "끝"이라고 입력을 받으면 break

  • 그 외에는 계속 입력을 받아 리스트에 추가해줌

title = "[List로 저장된 " + title + "]"; // 괄호로 감싸준 제목
System.out.println(title);
for(int i = 0; i < strList.size(); i++) { // strList 한줄씩 출력
    int number = i + 1; // i가 0번째이기 때문에
    System.out.println(number + ". " + strList.get(i));
}
 break;

2. Map 타입

case "Map":
    Map<Integer,String> strMap = new HashMap<>();
    int Linenumber = 1; // put에 필요한 index가 없기 때문에 선언
    while (true) { // 한줄씩 입력받아서 strMap에 저장
        String text = sc.nextLine();
        if (Objects.equals(text, "끝")) {
           break;
        }
         strMap.put(Linenumber++, text);
         //strMap.put(Linenumber, text);
         //Linenumber = Linenmber + 1, text;  => 이렇게도 사용 가능
}
  • Map<key, value>이기 때문에 key : Integer, value(입력받을 텍스트) : String

  • HashMap : 중복을 허용하지 않고 순서를 보장하지 않음, 키와 값으로 null이 허용

  • while문 사용

  • "끝"이라고 입력을 받으면 break

  • put(index, text)

  • index가 필요하기 때문에 선언을 해줌

title = "[Map으로 저장된 " + title.lines() + "]";
System.out.println(title);
// strList 한줄씩 출력
for(int i = 0; i < strMap.size(); i++) {
    int number = i + 1; // i가 0번째이기 때문에
    System.out.println(number + ". " + strMap.get(i + 1)); // i : index
}          // Linenumber = 1로 지정했기 때문에 i + 1이 되야함
 break;

3. Set 타입

case "Set":
LinkedHashSet<String> strSet = new LinkedHashSet<>();
while (true) { // 한 줄씩 입력받아서 strSet에 저장
    String text = sc.nextLine();
    if (Objects.equals(text, "끝")) {
        break;
    }
      strSet.add(text);
}
  • LinkedHashSet String 타입으로 선언
  • LinkedHashSet : 추가된 순서 또는 가장 최근에 접근한 순서대로 접근 가능
title = "[Set으로 저장된 " + title + "]";
System.out.println(title);
Iterator iterator = strSet.iterator(); // set이 가지고 있는 전부를 Iterator한테 넘겨줌 -> 하나하나 돌면서 조회할 수 있도록 도와줌
for(int i = 0; i < strSet.size(); i++) { // strList 한줄씩 출력
    int number = i + 1; // i가 0번째이기 때문에
    System.out.println(number + ". " + iterator.next()); // 가지고있는 것을 iterator에 담아놨기 때문에
    }
      break;
default: // case에 포함된 경우가 아닌 것이 들어올 수 도 있기 때문에 default
    System.out.println("저장할 수 없는 자료구조입니다.");
}
  • Iterator : 하나하나씩 순회할 수 있도록 하는 구조

전체 코드

import java.util.*;
public class Col7 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String CollectionName = sc.nextLine();
        String title = sc.nextLine();
        switch (CollectionName) {
            case "List":
                ArrayList<String> strList = new ArrayList<>();
                while (true) {
                    String text = sc.nextLine();
                    if (Objects.equals(text, "끝")) {
                        break;
                    }
                    strList.add(text);
                }
                title = "[List로 저장된 " + title + "]";
                System.out.println(title);
                // strList 한줄씩 출력
                for(int i = 0; i < strList.size(); i++) {
                    int number = i + 1; // i가 0번째이기 때문에
                    System.out.println(number + ". " + strList.get(i));
                }
                break;
            case "Map":
                Map<Integer,String> strMap = new HashMap<>();
                int Linenumber = 1;
                while (true) {
                    String text = sc.nextLine();
                    if (Objects.equals(text, "끝")) {
                        break;
                    }
                    strMap.put(Linenumber++, text);
                }
                title = "[Map으로 저장된 " + title.lines() + "]";
                System.out.println(title);
                // strList 한줄씩 출력
                for(int i = 0; i < strMap.size(); i++) {
                    int number = i + 1; // i가 0번째이기 때문에
                    System.out.println(number + ". " + strMap.get(i + 1));
                }
                break;
            case "Set":
                LinkedHashSet<String> strSet = new LinkedHashSet<>();
                while (true) {
                    String text = sc.nextLine();
                    if (Objects.equals(text, "끝")) {
                        break;
                    }
                    strSet.add(text);
                }
                title = "[Set으로 저장된 " + title + "]";
                System.out.println(title);
                Iterator iterator = strSet.iterator(); // 하나하나씩 순회할 수 있도록 하는 구조
                // strList 한줄씩 출력
                for(int i = 0; i < strSet.size(); i++) {
                    int number = i + 1; // i가 0번째이기 때문에
                    System.out.println(number + ". " + iterator.next());
                }
                break;
            default:
                System.out.println("저장할 수 없는 자료구조입니다.");
        }
    }
}

HashMap Vs TreeMap

1. HashMap

  • 중복을 허용하지 않고 순서를 보장하지 않음
  • 키와 값으로 null이 허용

2. TreeMap

  • key 값을 기준으로 정렬 가능
  • 저장 시 정렬(오름차순)을 하기 때문에 저장 시간이 다소 오래 걸림

HashSet Vs TreeSet Vs LinkedHAshSet

1. HashSet

  • 가장 빠르며 순서를 전혀 예측할 수 없음

2. TreeSet

  • 정렬된 순서대로 보관하며 정렬 방법을 지정할 수 있음

3. LinkedHAshSet

  • 추가된 순서 또는 가장 최근에 접근한 순서대로 접근 가능

0개의 댓글