- 큐나 스택 구현체로 ArrayDeque를 선택하자, 접근, 삽입/삭제 O(1)로 더 빠르다.
- string.split() 사용하지말고 StringTokenizer 사용
- 입출력시, Scanner, sout 사용 X, BufferedReader와 Writer를 사용하자.
- 순회 전에 배열 전체 초기값을 -1로 정하고, 반대로 조건에 부합하는 경우에만 값을 변경. Arrays.fill(arr, -1);
- 커스텀 정렬 시, Arrays.sort(arr, (a, b) -> { a[1] - b[1] }); (2번째 파라미터는 Comparator 람다식 구현)
- 음수라면, a가 먼저 배치,
- 양수라면, b가 먼저 배치,
- 우선순위 큐 (힙)로 정렬 할 수도 있다.
- PriorityQueue<Integer> pq = new PriorityQueue<>(); // 최소 힙, 오름
- PriorityQueue<Integer> pqMax = new PriorityQueue<>(Comparator.reverseOrder()); // 최대 힙, 내림
- 그래프 탐색 (BFS/DFS) 시 ArraysDeque 구현체를 사용하자.
- 빠른 모듈러(%) 연산
- long mod = 1_000_000_007일 때, (a % mod * b % mod) % mod;
- (a - b + mod) % mod 로 음수 방지
- Map객체 메서드 getOfDefault(key, default)로 없는 키 처리 할 때 활용
- Map객체 EntrySet으로 키와 값 둘다 조회가능
- 문자열 편집에서 속도라면 StringBuilder, 편의성이라면 StringJoiner 사용, 후자는 문자 사이에 "," 추가나 전/후 처리 좋음
- 원형처럼, 반복문을 계속 순환시켜야 할 때, (요세푸스/시계)
- 큐를 사용하는 방법, q.offer(q.poll()); -> 맨 앞을 꺼내고 맨 뒤로 다시 추가.
- for문에서 인덱스 아웃 보장, int idx = (idx + n) % arr.length; 모듈러연산을 사용해서 다시 앞 인덱스부터 시작 가능
- 2중 루프를 쓰기 전에, 스택/큐/투포인터로 구현가능한지 생각
- 투포인터/슬라이딩 윈도우로 합/최솟값/최댓값 구하기
- 누적합(Prefix sum) 구간 합 문제 O(1) 계산 가능
- 2차원 DP 초기화 Arrays.fill(dp[i], -1);
- BFS + 최단거리, 슬라이딩 윈도우에서 Deque 양쪽 연산 활용 pollFirst, pollLast
- 방문 체크, 좌표 압축, 중복 체크 등에서 HashMap + HashSet 조합으로 getOrDefault, putIfAbsent 활용
- 좌표 이동
- int[][] dirs = {{0,1}, {1,0}, {0,-1}, {-1,0}}; // 오른, 아래, 왼, 위
int dir = 0; // 초기: 오른쪽
current[0] += dirs[dir][0];
current[1] += dirs[dir][1];
- int[][] dirs = {{0,1}, {1,0}, {0,-1}, {-1,0}}; // 오른, 아래, 왼, 위
'코딩테스트' 카테고리의 다른 글
주어진 숫자중 최소값을 찾아보기 (0) | 2024.02.21 |
---|---|
프로그래머스 LV2 이진 변환 반복하기 (0) | 2023.07.10 |
프로그래머스 LV.0 문자열 계산하기 (2) | 2023.06.01 |
프로그래머스 LV.0 한 번만 등장한 문자 (0) | 2023.06.01 |
프로그래머스 LV.0 영어가 싫어요 (0) | 2023.06.01 |