[항해99 취업 리부트 코스 수강 후기] 2주차 WIL(기본 자료구조)

qk·2024년 7월 23일
0

회고

목록 보기
33/33
post-thumbnail

이번 주 진행된 팀 스터디에서 얻은 인사이트는 무엇인가요?

코드 개선

📖 문제
파일 정리

확장자와 파일 이름 분리

전)

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);
}

실행시간 감소

💡 확장자의 경우 파일명의 끝부분에 위치하기 때문에 확장자의 시작을 나타내는 "."을 뒤에서부터 찾는 것이 효율적이다.

추가 학습

BufferedWriter(write)가 StringBuilder(append)에 비해 느린 이유

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);
		}
	}
}

💡 BufferedWriterwrite 메서드에 lock(thread-safe)이 걸려 있다. lock을 거는 만큼 더 느려진다.

해시맵

  • HashMap의 삽입 및 조회 시 일반적으로 O(1)의 시간복잡도를 가진다.
  • 잘못된 해시 함수를 가질 경우 해시 충돌 처리 비용 때문에 최대 O(n)의 시간복잡도를 가진다.
    - 체이닝(Chaining) 기법으로 해결
    • 동일한 해시 값(Hash Value)을 갖는 Key들을 다른 버킷에 넣는 것이 아닌 동일한 버킷에 연결리스트 형식 연결하는 방법

참고 링크


항해 개발자 취업 리부트 코스를 수강하고 작성한 콘텐츠 입니다.
https://hanghae99.spartacodingclub.kr/reboot

0개의 댓글