20230502

아홍·2023년 5월 2일

2023.05

목록 보기
2/19

오늘은 이론적으로 배운 건 없고 문제풀이만 주구장창
페어 분께서 앞 부분은 다 해주셔서 너무 버스 탄 느낌

리스트, 세트, 해시맵
어제 대충 들여다볼때는 볼만했는데 막상 쓰려니까 헷갈리고 어렵네
특히 Iterator
답이 있나 많이 써봐야지....

레퍼런스? 라고 해야하나 이걸
암튼 고딩 때 수학의 정석 보는 기분이라 여태 거리를 뒀었는데 페어 분 덕분에 들여다봤더니 생각보다 볼만하네?
초반에 좋은 습관 들여놓으면 좋으니까.....
자주 보자
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ArrayList.html


package test03;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class iteratorHelp {
    public static void main(String[] args) {
        HashMap<String, String> hashMap = new HashMap<>();

        hashMap.put("봄", "Spring");
        hashMap.put("여름", "Summer");
        hashMap.put("가을", "Autumn");
        hashMap.put("겨울", "Winter");

        System.out.println(hashMap.containsKey("봄"));//true
        System.out.println(hashMap.containsValue("Spring"));//true
        System.out.println(hashMap.containsValue("봄"));//false

        HashMap<String, String> newMap = new HashMap<>(hashMap);
        hashMap.clear();
        System.out.println(hashMap); //{}
        System.out.println(hashMap.isEmpty()); //true
        System.out.println(newMap); //{여름=Summer, 가을=Autumn, 봄=Spring, 겨울=Winter}

        newMap.put("가을", "Fall");
        System.out.println(newMap.get("가을"));//Fall
        System.out.println(newMap.remove("겨울"));//Winter
        System.out.println(newMap);//{여름=Summer, 가을=Fall, 봄=Spring}

        Set<String> keySet = newMap.keySet();
        //hashmap은 key, value 두 개를 한 쌍으로 저장하기 때문에 iterator를 직접 호출 할 수 없다.
        //그러니까 일단 set로 만들어주기!!! 헷갈리지 말자 이건 그냥 세트로 만든 것 뿐!!!
        //HashMap.keySet()은 key로 만드는 set!!
        //Set는 인터페이스
        //참고 : keySet은 remove는 지원하지만 add는 지원하지 않는다
        Iterator<String> keyIterator = keySet.iterator();
        //set의 iterator
        //어렵게 생각하지 말자. set의 iterator!!!
        //key의 iterator

        while (keyIterator.hasNext()) {
            String key = keyIterator.next();
            System.out.println(key + " : " + newMap.get(key));
        }
        /*
        여름 : Summer
        가을 : Fall
        봄 : Spring
         */

    }
}

백준 2776번 문제
첫 번째 리스트를 arraylist에 넣어놓고
두 번째 리스트가 arraylist에 들어있는지 여부를 contains로 확인해주었다.

첫 번째 시도

package bk2776;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws Exception{
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        int testCase = Integer.parseInt(bufferedReader.readLine());

        for (int i = 0; i < testCase; i++) {
            int noteOneCase = Integer.parseInt(bufferedReader.readLine());

            StringTokenizer stringTokenizer1 = new StringTokenizer(bufferedReader.readLine());
            ArrayList<Integer> noteOneList = new ArrayList<>();

            for (int j = 0; j < noteOneCase; j++) {
                int noteOneData = Integer.parseInt(stringTokenizer1.nextToken());
                noteOneList.add(noteOneData);
            }

            int noteTwoCase = Integer.parseInt(bufferedReader.readLine());
            StringTokenizer stringTokenizer2 = new StringTokenizer(bufferedReader.readLine());

            for (int j = 0; j < noteTwoCase; j++) {
                int noteTwoData = Integer.parseInt(stringTokenizer2.nextToken());

                if (noteOneList.contains(noteTwoData)) {
                    System.out.println("1");
                }
                else System.out.println("0");
            }
        }
    }
}

시간 초과.
어디서 시간을 더 줄여야할지 감도 안잡혀서 gpt에게 물어봤다.

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int testCase = Integer.parseInt(br.readLine());

        for (int i = 0; i < testCase; i++) {
            int noteOneCase = Integer.parseInt(br.readLine());
            Set<Integer> noteOneSet = new HashSet<>();

            StringTokenizer st = new StringTokenizer(br.readLine());
            for (int j = 0; j < noteOneCase; j++) {
                noteOneSet.add(Integer.parseInt(st.nextToken()));
            }

            int noteTwoCase = Integer.parseInt(br.readLine());
            st = new StringTokenizer(br.readLine());

            for (int j = 0; j < noteTwoCase; j++) {
                int noteTwoData = Integer.parseInt(st.nextToken());

                if (noteOneSet.contains(noteTwoData)) {
                    bw.write("1\n");
                } else {
                    bw.write("0\n");
                }
            }
        }

        br.close();
        bw.close();
    }
}

버퍼 리더 뿐 아니라 라이터도 써보라해서 써봤다.
패스하긴 했는데...

백준은 C에 비해 자바가 장벽이 높네

0개의 댓글