문제 설명
풀이
import java.util.*;
public class hw2re {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // Scanner을 이용하여 System 안에서 입력받음.
String saveType = sc.nextLine(); // 저장할 자료구조명을 입력합니다. (List / Set / Map)
String title = sc.nextLine(); // 제목 입력
if (Objects.equals(saveType, "List")) { // saveType에 입력된게 "List"와 같으면
ArrayList<String> strList = new ArrayList<>(); //ArrayList String타입 strList 생성
while(!strList.contains("끝")) { // strList에 끝 이 포함되기 전 동안
strList.add(sc.nextLine()); // strList에 scan된 값을 추가한다
}
strList.remove("끝"); // 끝에는 번호를 안매길거니까 끝을 지워준다
// 제목 수정 출력 //
System.out.println("[ List 으로 저장된 " + title + " ]");
// 번호 붙여서 레시피 출력 //
for (int i=0; i < strList.size(); i++) { // strList의 size만큼 index i를 0부터 1씩 더하는 동안
// 0 ~ strList.size();
int number = i + 1; // 번호 1.부터 시작할거니까
System.out.println(number + ". " + strList.get(i)); // i번째 strList를 number 매겨서 출력
}
System.out.println("끝"); // 아까 번호 안매길라고 지웠던 끝 다시 출력 (문제 조건만족용)
} else if (Objects.equals(saveType, "Set")) { // saveType에 입력된게 "Set"와 같으면
LinkedHashSet<String> strSet = new LinkedHashSet<>(); // 선언
while(!strSet.contains("끝")) {
strSet.add(sc.nextLine());
}
strSet.remove("끝");
// 제목 수정 출력 //
System.out.println("[ Set 으로 저장된 " + title + " ]");
// 번호 붙여서 레시피 출력 //
Iterator iterator = strSet.iterator();
for (int i = 0; i < strSet.size(); i++) {
int number = i + 1;
System.out.println(number + ". " + iterator.next());
}
System.out.println("끝");
} else if (Objects.equals(saveType, "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);
}
// 제목 수정 출력 //
System.out.println("[ Map 으로 저장된 " + title + " ]");
// 번호 붙여서 레시피 출력 //
for (int i=0; i < strMap.size(); i++) {
int number = i + 1;
System.out.println(number + ". " + strMap.get(i + 1));
}
} else {
System.out.println("잘못된 입력입니다.");
}
}
}
궁금한 것
1. Map부분의 끝 쪽에서 strMap.get(i + 1) i+1번째 value를 가져와야만 정상적으로 번호가 매겨져서 출력됐는데
strMap.get(i) 를 하면 0번째 입력된 정보부터 가져오는 거일텐데 실제로 출력하면 1. null 로 출력되고 다음부터 입력한 값이 2. 부터 번호매겨 출력되는지 잘 모르겠음.
2. 끝을 입력했을 때 while문을 종료하는 부분에서 위에 작성한 코드 방법과 while(true)와 if (Objects.equals(text, "끝")), break;를 사용하는 방법 말고 다른 효율적인 방법이 뭐가 있을까?
3. Map은 key - value pair구조로 이루어져있는데, 위 코드 상황 처럼 value값에 스캔한 입력값을 저장할 때 remove 는 키값을 입력해 삭제하는건데 value값만 알고있고 key값은 정확히 모를 때 특정 value값을 삭제하는 방법은 없을까?
'Experience > 항해99 18기' 카테고리의 다른 글
TIL #1 (2) | 2023.12.12 |
---|---|
WIL 0주차 회고록 (0) | 2023.12.10 |
TIL - 웹미니프로젝트 1일차 회고 (작성중) (0) | 2023.12.06 |
WIL회고록 01 - Java 문법 1주차 (2) | 2023.11.21 |
Java 문법 1주차 숙제 (3) | 2023.11.21 |