006. 2주차 과제

코딩벌레·2023년 5월 29일
0

[Java 문법 종합반] 2주차 과제


💁‍♀️ 자료구조 요리 레시피 메모장 만들기

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

ex) 입력 예시

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

ex) 예시 출력

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




✏️ 해결과정


import java.util.*;

class relist {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String CollectionName = sc.nextLine();
        String title = sc.nextLine();

        switch(CollectionName) {

제일 먼저 자료구조명(CollectionName)을 입력하도록 한다.
또한 한번만 입력하는 제목도 함께 입력받는다.

컬렉션마다 처리 방법이 다르므로 switch문으로 CollectionName을 참조해 구분한다.


  1. List
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);

	for(int i = 0; i < strList.size(); i++){
		System.out.println(i+1 +". "+strList.get(i));
	}
	break;

입력된 문자열이 "끝"이라면 입력을 종료하고, 아닌 경우 add()메서드로 문자열을 리스트에 저장하며 반복한다.
ArrayList 타입의 길이를 조회할때는 size() 메서드를 사용한다.
저장된 값을 참조할 때에는 리스트이름.get(참조할 순번) 형태로 한다.


  1. Set
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();
	for (int i = 0; i < strSet.size(); i++) {
		int number = i + 1;
		System.out.println(number + ". " + iterator.next());
	}
	break;

set 타입은 저장된 값의 순서가 없기 때문에 Iterator를 이용해야 한다.
List와 같은 방법으로 입력받고 iterator를 사용해 참조한다.
iterator는 직접 값을 가져올 수 없는 Set 컬렉션에 사용할 수 있고, 다른 컬렉션프레임워크에서도 값을 쉽게 참조할 수 있게 한다.

참고 url


  1. Map
case "Map" :
	Map<Integer, String> strMap = new HashMap<>();
	int lineNum = 1;
	while (true){
		String text = sc.nextLine();
		if (Objects.equals(text,"끝")) {
			break;
		}
		strMap.put(lineNum++,text);
	}
	title = " [ Map으로 지정된 "+title+" ]";
	System.out.println(title);
	for(int i = 0; i < strMap.size(); i++) {
		System.out.println(i+1 +". "+ strMap.get(i+1));
	}
	break;

Map 타입은 key와 value의 두가지 값을 필요로 한다.
입력과정에서 lineNum 변수를 설정해 1씩 증가시켜 key값으로 저장하였다.

반복계수(i)의 증감을 이용해 for문으로 쉽게 참조할 수 있었다.


💯 결과


전체코드

import java.util.*;

class relist {
    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);

                for(int i = 0; i < strList.size(); i++){
                    System.out.println(i+1 +". "+strList.get(i));
                }
                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();
                for (int i = 0; i < strSet.size(); i++) {
                    int number = i + 1;
                    System.out.println(number + ". " + iterator.next());
                }
                break;
            case "Map" :
                Map<Integer, String> strMap = new HashMap<>();
                int lineNum = 1;
                while (true){
                    String text = sc.nextLine();
                    if (Objects.equals(text,"끝")) {
                        break;
                    }
                    strMap.put(lineNum++,text);
                }
                title = " [ Map으로 지정된 "+title+" ]";
                System.out.println(title);
                for(int i = 0; i < strMap.size(); i++) {
                    System.out.println(i+1 +". "+ strMap.get(i+1));
                }
                break;
            default :
                System.out.println("저장할 수 없는 자료구조 입니다.");
        }
    }
}

실행 결과

Set
백종원 돼지고기 김치찌개 만들기
잘익은 김치 한포기를 꺼내서 잘라주세요.
핏물 뺀 돼지고기를 넣어주세요.
중불로 줄여서 오래 끓여주세요~!!	
끝


[ Set 으로 저장된 백종원 돼지고기 김치찌개 만들기 ]
1. 잘익은 김치 한포기를 꺼내서 잘라주세요.
2. 핏물 뺀 돼지고기를 넣어주세요.
3. 중불로 줄여서 오래 끓여주세요~!!	

0개의 댓글