문제
- 백준 10815 문제를 자바로 해결 시도
1-1. 배열 두개를 만들어서 직접 비교해보려함
1-2. 시간초과가 계속 뜸
- 백준 14425 문제를 자바로 풀어봄
1-1. 이진 탐색을 해서 배열에 존재하는 값과 같으면 count++ 해줌
1-2. count가 정상적으로 출력되지 않는다.
시도
- 시간초과를 해결해보기 위한 시도
1-1. BufferedReader를 사용해봄
-> 안됨
1-2. BufferedWriter를 사용해봄
-> 안됨
1-3. 자바말고 다른 언어를 사용해봄
-> C언어 사용 -> 여전히 시간초과
1-4. 알고리즘에 문제가 있을 수 있겠다고 생각, 코드를 다시 살펴봄. 직접 배열을 하나하나 비교하는게 시간이 많이 걸리면 정렬이나 탐색 알고리즘을 사용하면 좀 줄어드나?
-> 탐색 알고리즘을 적용해봐야 할듯
- 여러 가지 시도
2-1. String 값이 제대로 들어가지 않았나 싶어서 String 값 출력해봄
-> 제대로 출력됨
2-2. Objects.equals의 반환 값 문제인가 싶어서 compareTo로 비교해봄
-> 일단 이 방식은 맞는데 count 값에 대한 해결은 안됨
2-3. count++ 가 제대로 안 먹히나?
-> sout으로 해봤는데 제대로 찍힘
2-4. BufferedWriter 문제 일 것으로 예상
해결
- 일단 이진 탐색 알고리즘을 사용
1-1. 우선은 sort로 정렬을 하고 시작 + BufferedReader, BufferedWriter도 사용
1-2. 정렬한 Array를 이진 탐색
1-3. 해결
- BufferedWriter에서 제대로 된 int값을 출력하지 않는다는 것을 확인
2-1. 그러면 String 값만 출력되는 건가?
2-2. String만 출력되는 것으로 확인
2-3. String을 형변환을 시켜주면 될 것으로 보임
-> String.valueOf()라는 것을 쓰면 된다고 나옴
2-4. 해결
알게 된 점
- 일일히 배열을 비교하는 것은 O(n^2) 이 걸릴 것으로 예상되지만 이진 탐색은 O(logN)이 걸린다.
1-1. 중간을 기준으로 탐색 대상을 절반씩 줄여나가기 때문
- BufferedWriter가 String 값만 출력해준다는 것을 처음 알았다... 공부 좀 하자
2-2. String.valueOf() 말고 Integer.toString()이라는 메서드도 integer를 String으로 바꿔줄 수 있다.
-> 다만 null이 들어오면 String.valueOf()는 null을 문자열로 받아드리지만 Integer.toString()은 Null PointerException 발생... 예외 처리 해줘야함.
자바는 뭔가 쓸만한게 많음 그래서 외울 것도...