✍ Today I Learned
Java 스터디 시작
새롭게 한 주가 시작되면서 2주차에 접어들었다.
오전 9시 언어 스터디 발제를 시작으로 6주간의 언어 스터디도 함께 하게 되었다.
지난 pre-onboarding 주차 때 공부했던 책 [혼자 공부하는 자바]를 가지고
매일 하루 30분씩 스터디 조원들과 언어에 대한 기본기를 다지는 시간이다.
우리 조는 월~금까지는 개인 공부를 진행하고 토요일에 각자 맡은 챕터를 발표하기로 했다.
나는 바로 이번주에 함께 공부할 6 챕터 - 클래스를 맡아 발표를 진행하게 되었다.
알고리즘 주간과 같이 진행되기 때문에 조금 부담이 되기도 했는데,
확실히 다른 사람에게 설명해주면서 스스로 더 이해하는 스타일이라 즐거운 시간이 될 것 같다!
알고리즘 코드 리뷰
옆 조의 조원분께서 본인의 조와 함께 코드 리뷰를 진행해보지 않겠냐는 제안을 주셨다.
우리 조는 거의 각자 알고리즘을 풀고 있었기 때문에 너무 감사하고 궁금한 마음으로 옆 조 분들과 함께 각자 풀이에 대한 리뷰를 하게 되었다.
리뷰 하는 방식은 다음과 같다.
- 함께 풀이를 진행할 양을 정한다.(ex. 오늘은 17번까지 풀어볼게요~)
- 각 문제마다 풀이한 코드를 화면 공유하여 조원 전체가 함께 본다.
- 다른 사람의 코드를 설명 없이 최대한 이해해본다.
- 서로 풀이한 방식이 다른 경우 간단하게 흐름을 설명한다.
- 선생님의 정리로 마무리.
같은 문제인데도 모두가 다르게 접근한다는 게 가장 신기한 포인트였다.
리뷰를 하며 나왔던 내용들을 짧게나마 정리해보자.
ArrayList와 LinkedList
둘 다 Java에서 제공하는 List 인터페이스를 구현한 Collection 구현체이다. (내부 동작 방식은 전혀 다름)
배열의 단점들 1) 초기 길이를 지정해야 하고, 2) 길이를 동적으로 변경할 수 없다는 점 때문에 데이터의 길이를 예상하기 어려울 때나 가변적으로 요소의 개수를 늘려야할 때는 배열보다 리스트를 주로 사용한다.
ArrayList
ArrayList는 내부적으로 데이터를 배열에서 관리하며 데이터의 추가, 삭제를 위해 아래와 같이 임시 배열을 생성해 데이터를 복사하는 방법을 사용하고 있다.
대량의 자료를 추가/삭제하는 경우에는 그만큼 데이터의 복사가 많이 일어나게 되어 성능 저하를 일으킬 수 있다. 반면, 각 데이터는 인덱스를 가지고 있기 때문에 한 번에 참조가 가능해 데이터의 검색에는 유리한 구현체이다.
LinkedList
LinkedList는 데이터를 저장하는 각 노드가 이전 노드와 다음 노드의 상태만 알고 있다고 보면 된다.
ArrayList와 같이 데이터의 추가, 삭제 시 불필요한 데이터의 복사가 없어 데이터의 추가, 삭제 시에 유리한 반면 데이터의 검색 시에는 처음부터 노드를 순회해야 하기 때문에 성능상 불리하다.
※ 출처 : Java의 LinkedList와 ArrayList에 대한 비교
배열 요소에 대한 중복 검사
배열 안에서의 중복 검사를 해야 하는 문제가 있었다. 나는 Set을 이용하여 중복을 없애주었는데, 다른 조원분은 indexOf()를 이용하셔서 관련 내용을 찾아보았다.
ArrayList.indexOf() 리스트에서 특정 값 인덱스 구하기
indexOf()는 자료구조에서 특정 문자의 인덱스를 찾기 위해 사용된다. 인자로 객체를 받고, 리스트 앞쪽부터 인자와 동일한 객체가 있는 찾아서 있다면 그 인덱스를 리턴, 없다면 -1을 리턴한다.
배열에서는 지원하지 않고 ArrayList 자료구조에서만 지원하기 때문에 asList()를 통해 변환시켜 인덱스를 구해야 한다.
flag 배열을 만들어 중복 값 확인하기
위와 다르게 배열의 중복 검사를 또 다른 방법으로 해결하신 조원분이 계셨다. 출력 값이 나올 수 있는 최대 길이의 flag[] 배열을 생성하고, 해당 요소를 인덱스로 식별하여 중복 여부를 0과 1로 나누어 주는 방법이다. 기회가 된다면 꼭 써먹어봐야지.
오늘의 나는
하루 종일 졸음과의 사투를 벌이면서 집중력이 바닥을 찍었었는데,
동료분들과 풀이에 대한 리뷰를 하면서 에너지와 흥미를 재충전할 수 있었다.
오늘의 경험이 굉장히 좋아서 우리 조원 분들이 괜찮으시다면 리뷰 방식을 도입해보는 게 어떨까 싶다.
제안해주셨던 옆 조 조원분께 다시 한번 감사드린다.
내일은 알고리즘 모의고사가 있는 날이다.
오늘 컨디션 난조로 목표했던 문제까지 풀진 못했지만,
목요일에 있는 진짜 테스트 전까지 최대한 알고리즘과 더 친해져 봐야겠다.
'📝 TIL' 카테고리의 다른 글
[TIL] 2주차 알고리즘 조각 모음 (0) | 2022.11.23 |
---|---|
[TIL] 2주차 알고리즘 모의고사 (4) | 2022.11.22 |
[TIL] 1주차 알고리즘ㅣ문제 풀이 꿀팁 (0) | 2022.11.19 |
[TIL] 1주차 알고리즘ㅣ주간 시작 (0) | 2022.11.18 |
[TIL] 1주차 미니 프로젝트ㅣ발표 (0) | 2022.11.18 |