[Java] 연산자,조건문,반복문,배열,컬렉션 - 문제 풀이

이해찬·2023년 6월 15일
0

항해일지

목록 보기
8/35

23.06.15 - D+15, 요리 레시피 문제 풀이

기록양식 (TIL)
1. 사용 개념
2. 의문점 or 문제
3. 시도해 본 것들(+응용) or 삽질
4. 해결
5. 알게 된 점(회고)

1. 개념

사용한 개념들
Scanner switch case

  1. ArrayList > while > if > break
  2. Map HashMap > while > if > break
  3. Set LinkedHashSet > while > if > break

2. 문제

풀이 접근

  1. 저장할 자료구조 > 배열 👉 고정된 개수의 데이터가 아니기 때문에 컬렉션
  2. 사용자가 입력한 타이틀레시피가 변수로 저장
  3. 레시피가 여러개니까, 반복문을 사용해서 저장
  4. 반복문 내에 조건문을 활용해서 "끝" 을 타이핑하면 종료

괄호 친 제목, 순서에 맞는 번호


3. 풀이

시도 :
1. 배열 생성
2. 조건문 문법에서 막힘 >
arraylist > while 조건문 내에서 사용자가 입력한 값(레시피)가 배열로 돌면서 찍힌다. 그리고 "끝" 을 입력하면 종료된다.

arraylist , map, set >> 을 나누어서 해보기

📟. 입력

Scanner sc = new Scanner(System.in);
String title = sc.nextLine();
String CollectionName = sc.next();


ArrayList<String> strList = new ArrayList<>();
            while(true){
                int i = 0;
                System.out.println(i+ 1 + "." + CollectionName);
                i++;
            } if (CollectionName == "끝"){
                break;
            }

        }

잘못 생각한 부분

  1. 사용자가 입력한 변수를 while문 바깥에서 변수를 지정>loop내의 변수는 loop안에서만 적용이 가능

  2. while문 내에서 break; 로 끊어줘야 하는데, 위에 코드는 무한 루프 중 > while문 내에 if문 을 활용해서 탈출 // 조건문내에서 레시피 번호를 붙여주는게 아니라, 출력할 때 붙여주기, loop문 에서 변수는 loop문 에서만 적용


  3. if문 내에서 == 연산자 기호를 사용해서 을 찾으려는 시도 >> 문자열의 내용을 비교 하려면 Object.equals(변수, 입력값)으로 찾기 >String 변수는 참조형 주소를 가지고 있기 때문

  4. 배열문.add(변수)을 활용해서 값을 추가, 저장

  5. for문을 통해서 출력 >> 조건에서 변수.length >변수.size()를 활용, 컬렉션은 동적 배열이기 때문에 정해진 길이가 아닌 사이즈로 설정


4. 해결

📟. 입력

public class _0_atest {
    public static void main(String[] args) {

        System.out.println("1. 사용한 배열을 입력하세요. > enter");
        System.out.println("2. 제목을 입력하세요. > enter");
        System.out.println("3. 레시피를 입력하세요. > enter");

        Scanner sc = new Scanner(System.in);

        String array = sc.nextLine();
        String title = sc.nextLine();

        ArrayList<String> strList = new ArrayList<>();
            while(true) {
                String text = sc.nextLine();
                if (Objects.equals(text, "끝")) {
                    break;
                }
                strList.add(text);
            }
        System.out.println("[" + array + "," + title + "]");
        for (int i = 0; i < strList.size(); i++) {
            int number = i + 1;
            System.out.println(number + "." + strList.get(i));
        }

        }

    }

+map / set

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 + "]";
  System.out.println(title);
  //strList 를 한줄씩
  for (int i = 0; i < strMap.size(); i++) {
      int number = i + 1;
      System.out.println(number + "." + strMap.get(i+1));
  }
  break;

구조의 차이

  1. 생성 부분 = Map의 기능 HashMap을 활용해서 생성
  2. 값 추가 부분 = <키, 값> = <index,str> index값을 추가 생성 해야되기 때문에 숫자 변수 필요 /
    LineNumber++ > 뒤++, 기존 순번이 추가되고 나서 +넘버링 / add >put
  3. 출력할 때 strMap.get(i) > i와 index값을 맞추기

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;
default:
   System.out.println("저장할 수 없는 자료구조입니다.");

구조의 차이

  1. 생성 부분 = 생성자가 없는 Set은 기능 HashSet을 활용해서 생성
  2. 값 추가 부분 = map 과는 다르게 /arraylist 와는 같게 add로 리스트 추가
  3. 출력할 때 strSet.get() > set을 한줄씩 출력하는 방법은 Iterator을 활용해서 출력

    Iterator 순서가 없는 배열에서 사용 > set은 순서없고 중복없는 배열이기 때문에 get을 사용하지
    않음. get은 순서가 있는 배열을 조회할 때 사용.

왼쪽 = get을 사용 / 오른쪽 = Iterator 사용


5. 알게된 점

공통 특징:

  • 생성 > 반복문을 통해 배열 > 조건문을 통한 break; > 조건문에서는 str을 비교할 땐 equals를 사용 > 배열에 값을 추가 > 배열문을 반복문을 통해 조회 > 동적배열에 맞는 size조건문 활용 > 조회한 것을 출력

차이점 :

  • 생성자의 문법과 방식: list는 그대로, map (key,value)과 set은 그들을 도와주는 hashmap hashset을 사용
  • 배열에 값을 추가 : list setadd를 활용. map은 key값의 index를 추가 put을 활용
  • 값을 조회 : list mapget을 통해서 출력 / set은 순서가 없어서 iterator를 사용
profile
디자인에서 개발자로

0개의 댓글