어제 좀 늦게 잤더니 점심 먹고 잠들어버려서 9시가 넘었는데도 계속 공부를 하는 중이다. 강의는 최소한 내일배움캠프에서 전달해준 시간표에 맞추려고 노력 중인데 생각보다 빡세다.
알고리즘의 경우 문제를 주시면 내가 먼저 풀어보고 해설 강의 보는 형식으로 되어있는데 내 한국어 실력이 부족한 건지 문제 이해를 다른 방향으로 해서 다른 형식의 코딩을 한 후 해설 강의를 보고 나서야 아 이렇게 하라는 뜻이구나 하고 나름 방식을 바꿔서 코딩해보는 중인데 문제를 좀 명확하게 내줬으면 싶은 심정이긴 하다.
외가의 영향으로 남들이 다 영어를 배울 때 중국어를 배워서 영어에 매우 취약한 탓인지 이름 짓기도 힘들고 단어 뉘앙스로 어떤 기능인지 때려맞추기도 안 되서 IT영어와 관련된 책 한 권을 샀다... 틈틈이 읽고 기억나는대로 머리속에 저장해놔야지 변수 개수가 많아지니 변수명 짓는 거에서도 한계가 와서 안 되겠다 싶었다. 나중에 취업해서 협업할 때 나만 변수명 함수명 클래스명을 괴상하게 지을수는 없는 법이니까.
오늘은 아침에 어제거 TIL을 정리하고 마지막 부분에서 넋 놓고 들은 JAVA 후반 부를 다시 들으면서 개념 이해를 어느 정도 한 후 계속 알고리즘만 들었다. 해설을 보기 전 혼자 먼저 코딩을 하는 부분에서 생각보다 시간을 많이 잡아 먹어 공부한 분량은 은근 적은 느낌.
하지만 문제의 방향을 잘못 이해한 거 아니면 해설과 거의 비슷하게 작성해서 나름 뿌듯했다. 이제 익숙해져서 시간만 줄이면 될 듯...
최빈값 찾기에서 알파벳 전체 개수를 세주는 리스트를 쓰기가 싫어서 딕셔너리의 키값을 이용하는 형식으로 바꿔 작성해보았는데 빅오표기법으로 계산해보니 이게 시간이 더 걸리더라... 하지만 가장 적게 사용한 값을 뽑아내는 거에서는 내가 계산한게 맞다면 얘가 더 시간이 절약 됐다.
또한 최빈값 찾기에서 해설에 오류가 있어 최빈값이 여러개일 때 가장 첫 번째 단어만 나오는 문제가 있었는데 이 역시 금방 해결할 수 있었다.
는 대부분이 어제 들은 강의 + 문제 풀이라 개념만 빨리 적도록 하자
ArrayList
컬렉션, 크기가 고정되지 않은 리스트로 자주 쓰임
스트림
값을 하나씩 꺼내서 연산을 수행해준다.
Stream<object> stream = list.stream();
컬렉션<자료형> 스트림명 = 값을 가져올 컬렉션.stream()의 형태로 쓰이며 위와 같이 쓰이는 경우는 어떤 컬렉션이고 어떤 자료형으로 선언해야할지 모를 때 사용해준다.
Lamda
기초 공부를 할 때는 당장 필요하지 않다. 일단 기존 함수를 먼저 하고 IDE에서 람다식으로 형태 변환이 가능하다고 나오는 경우 변환해보면서 익히는 것이 더 좋다
네트워킹
자바는 보통 리트로핏(retrofit) 라이브러리를 사용
사용법은 쓸 때 자료 찾아보자
알고리즘에 대해 들으며 많이 해주신 말씀들이 코딩테스트에 관한 것들인데 코딩테스트는 보통 언어를 지정해주지 않기 때문에 개념은 python으로 공부하고 사용할 때 원하는 언어로 사용하는게 좋다고 한다.
정해진 input에 정해진 output이 나오도록 + (간혹)실행시간 제약에 맞추시오
라는 문제가 제시되었을 때 python이 시간 제약에 유리한 편이다.
코드가 짧은게 좋은 이유는 코딩테스트는 시간이 정해져 있기 때문에 코드작성 타임이 짧은게 좋기 때문이다.
모든 알고리즘은 빅오표기법(가장 최악의 시간이 걸릴 때)의 시간복잡도가 중요하다
모든 알고리즘은
1. 입력값에 비교해 얼마나 늘어날 것인가?
2. 공간복잡도보다 시간복잡도를 줄이기
를 고려해야한다.
시간 복잡도 계산은 맞는지 모르겠지만 내가 이해한 바로는
변수 선언 - 단순상수 더해주기
for문 N곱하기
if문 상수곱하기
로 계산한다.
코드는 그냥 아예 다른 포스터에 모아놓도록 하자... 너무 길다.