2024. 11. 19. 15:13ㆍ코딩테스트/Java
1. 인덴트에 탭과 스페이스 섞어쓰지 않도록 주의
2. 조건문 줄이기 (return값 사용)
- return값 boolean이면 바로 리턴
예: if(x%n!=0) answer=false; return answer; --> return x%n==0;
- 계산 결과 값 사용
예: cnt = (x&1)==1 ? 1 : 0; -> cnt += x&1;
- que가 비어있을때 poll하면 null을 리턴하는 것 활용
- que.isEmpty() 리턴값이 true, fasle 인 것 활용
3. 반복문 종료조건 깔끔하게
임시변수, 조건문 최소화할 수 있는 종료조건 생각하기
4. 객체지향적으로 코딩하기
1) 클래스를 만들어 사용한다.
- 클래스를 만들 때 적절한 속성(변수), 기능(메소드)을 선언한다.
- 생성자는 클래스에 필수적인 요소만 포함하여 생성한다.
2) 값이 다르면 새로운 객체를 생성
좌표가 달라지게 되면 새로운 Point 를 new
3) solution은 흐름만, 실제 기능은 객체 안의 메소드가 수행하도록 코딩
5. 가변요소(하드코딩) 줄이기
반드시 상수가 들어가야하는 경우 final 변수 선언
6. 자바 코딩 규칙에 맞게 변수명 짓기
- 자의적으로 줄인 변수명을 사용하기 보다 용도를 충분히 유추할 수 있는 적절한 변수명을 사용하는 것이 좋음
- 무의미한 변수명 보다는 변수를 구분할 수 있는 이름 사용하기
7. 코드 가독성 생각하기
- 미리 컨디션을 확인해서 return시킬 것은 먼저 return 시키고, 그 이후에 로직이 나오는 방식으로 작성
- 최대한 if - else 등으로 indent 가 들어가지 않는 형태로 작성
- else 사용을 지양 (return, continue, break 등 활용)
8. 내가 짜고 있는 코드가 혹시 자바 라이브러리로 제공되는 기능은 아닐까? 생각해보기
- previousWords 배열의 문자열 포함 여부를 for문으로 하나하나 비교 -> ArrayList로 만들어서 contains()
- for문으로 배열 일부 복사 -> Arrays.copyOfRange(원본 배열, 복사할 시작인덱스, 복사할 끝인덱스)
9. label 문법 사용하지 않기
해당 부분을 메소드로 분리해서 return으로 처리
10. 수학 개념 나오면 그 정의에 맞게 코드 짜기
예) 소수 -> 1과 자기 자신만으로 나누어 떨어지는 1보다 큰 양의 정수.
11. 문자열 비교할 때 equals()보다 효율적인 방법 생각해보기
- 한 단어만 비교하면 된다면 charAt()
- Hashmap의 키 값으로 문자열을 저장하면 문자열이 맵 내부의 "해시값"으로 저장되어 비교되기 때문에 문자열 비교 속도가 빠르다
12. 배열 기본값 활용하여 불필요한 실행문 제거
int 기본값 0, boolean 기본값 false, 객체 기본값 null
13. 배열이나 리스트를 정렬해서 얻을 수 있는게 있는지 생각해보기
14. 배열 순회하는 경우 배열의 크기를 n+2로 만들면 엣지값 확인 조건을 없앨 수 있다
15. 객체를 list에 넣을 때는 객체에 필요한 모든 처리들을 끝내고 리스트에 넣기 (넣다 뺐다 불필요한 작업 줄이기)
16. 코딩 전 접근방법 여러번 다듬어 생각해보기
문제에 접근할 때 처음 떠오르는 방법으로 냅다 코드를 짜기 보다
다른 좋은 방법을 좀 더 생각해보는 것이 오히려 시간 단축에 도움이 된다
머리 속에 떠오르는 아이디어를 조금 더 다듬고 코딩을 시작하자
관련하여 읽어 볼 게시물 ▼
https://developerfarm.wordpress.com/2012/02/03/object_calisthenics_summary/