오늘은 이론적으로 배운 건 없고 문제풀이만 주구장창
페어 분께서 앞 부분은 다 해주셔서 너무 버스 탄 느낌
리스트, 세트, 해시맵
어제 대충 들여다볼때는 볼만했는데 막상 쓰려니까 헷갈리고 어렵네
특히 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에 비해 자바가 장벽이 높네