본문 바로가기
코딩테스트

자바 코딩테스트 여러가지 팁

by 다오__ 2025. 9. 15.
  • 큐나 스택 구현체로 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];