📖 문제
파일 정리
확장자와 파일 이름 분리
전)
for(int i = 0; i < N; i++) {
String[] s = br.readLine().split("\\.");
map.merge(s[1], 1, Integer::sum);
}
후)
for(int i = 0; i < N; i++) {
String file = br.readLine();
map.merge(file.substring(file.lastIndexOf(".")+1, file.length()), 1, Integer::sum);
}
실행시간 감소
전 | 후 |
---|---|
💡 확장자의 경우 파일명의 끝부분에 위치하기 때문에 확장자의 시작을 나타내는 "."을 뒤에서부터 찾는 것이 효율적이다.
public void write(int c) throws IOException {
Object lock = this.lock;
if (lock instanceof InternalLock locker) {
locker.lock();
try {
implWrite(c);
} finally {
locker.unlock();
}
} else {
synchronized (lock) {
implWrite(c);
}
}
}
💡
BufferedWriter
의write
메서드에lock(thread-safe)
이 걸려 있다. lock을 거는 만큼 더 느려진다.
O(1)
의 시간복잡도를 가진다.해시 함수
를 가질 경우 해시 충돌 처리 비용 때문에 최대 O(n)
의 시간복잡도를 가진다.체이닝(Chaining) 기법
으로 해결항해 개발자 취업 리부트 코스를 수강하고 작성한 콘텐츠 입니다.
https://hanghae99.spartacodingclub.kr/reboot