[항해99 취업 리부트 코스 학습일지] 알고리즘 시작

HEUKWU·2024년 3월 27일
0

알고리즘 주차가 시작되었다. 나는 언어 숙련도에 비해 알고리즘 실력이 좋지 않다. 학창 시절에 했던 수학 공부처럼 쉽게 오르지 않는 실력에 항상 제대로 해보려다 포기해 왔다.
하지만 이제는 과제도 있고 스터디도 참여해야 하니 하기 싫어도 할 수밖에 없다.

첫날이라 그런지 과제 난이도가 그렇게 높지는 않았다.
그래도 내가 전에 스스로 풀어보려다 실패한 문제들이 몇 있었다.
그래도 시간 날 때마다 틈틈이 몇 문제씩 풀어봐서 그런지 실력이 오르긴 했나 보다. 물론 코딩테스트를 치를 정도가 되려면 아직 한참 멀었지만.

과제를 끝내고 스터디에 참여했다.
문제 난이도가 높지 않아서 코드들이 크게 다르지 않고 비슷했다.
그래도 서로 작성한 코드를 설명하고 질문하는 시간을 통해 얻은 것이 많았다.
남의 코드를 보면서 몰랐던 기술이나 새로운 아이디어를 얻는 것도 좋지만 무엇보다 내 코드를 설명하는 것이 가장 좋았다.
나의 생각을 남에게 정확하게 전달하려면 많은 노력이 필요하다. 문제를 풀면서 했던 생각들을 정확히 기억해 내고 남들의 배경지식과 실력을 고려해서 쉽게 이해할 수 있도록 설명해야 한다.
그 과정 자체가 훌륭한 복습이 되는 것이다.


나는 백준으로 문제를 풀 때 줄곧 입력값을 BufferedReader를 사용해서 받아왔다.
오늘 스터디 시간에 다른 팀원이 푼 코드를 보는데 입력값을 Scanner를 사용해서 받는다는 것 말고는 완벽하게 같은 코드였다.
하지만 시간이 생각보다 많이 차이 났다.
내가 BufferedReader를 사용한 것은 단지 더 효율적이라는 단순한 이유에서였다.
그래서 이번 기회에 둘을 간단히 비교해 보려고 한다.

Scanner

Scanner 클래스는 기본 유형과 문자열을 구문 분석할 수 있는 간단한 텍스트 스캐너이다. 간단한 사용자 입력을 읽는 데 사용된다.
특징은 내부적으로 버퍼를 사용하지 않으므로 각 입력 작업마다 입출력 작업이 발생해 성능이 떨어질 수 있다.
개인적으로 Scanner의 가장 큰 장점이라고 생각하는 부분인데 nextInt() 같은 메서드를 사용해서 다양한 타입의 입력을 읽을 수 있다는 것이다.

BufferedReader

BufferedReader는 내부적으로 버퍼를 사용해서 데이터를 한 번에 여러 문자씩 읽어 들임으로써 입출력 작업의 수를 줄여준다. 즉 성능이 향상된다.
이 부분 덕분에 시간에 차이가 발생하는 것이다.
이것 말고는 다 단점인 것 같은데 우선 가장 불편한 것이 Scanner와 달리 기본적으로 문자열만 읽어 들여 타입 변환이 필요하다는 것이다. 때문에 코드가 Scanner에 비해 길어지고 지저분해진다.

이렇게 자바의 두 가지 입력 방법을 간단하게 알아보았다.
확실히 Scanner를 사용하면 BufferedReader에 비해 코드도 깔끔해지고 길이도 짧아진다.
하지만 시간복잡도를 고려해야 하는 문제라면 BufferedReader가 필수적일 수 있다.
실제로 같은 코드이더라도 BufferedReader를 사용했을 때는 통과하는데 Scanner는 시간 초과가 발생하는 알고리즘 문제도 존재한다.

참고
https://velog.io/@langoustine/Scanner-VS-BufferedReader
https://www.geeksforgeeks.org/difference-between-scanner-and-bufferreader-class-in-java/

항해99 취업 리부트 코스를 수강하고 작성한 콘텐츠 입니다.

항해 리부트 코스

0개의 댓글

관련 채용 정보