코테뿌수기 - java/Tip!

1. Big Integer 조심하기 - String에서 int로 바꿀때 Big Integer가 필요할 때도 있으니 범위 잘체크해서 확인하기! - 그냥 int말고 long을 써라 2. Scanner vs BufferedReader - 입력데이터가 많으면 Scanner를 사용할 때 시간초과가 발생할 수 도 있음 3. 오름차순 vs 내림차순 - 오른차순 정렬은 그냥 Arrays.sort(A) - 내림차순 정렬은 Arrays.sort(A, Collections.reverseOrder()); 쓰면되는데 객체에만 가능하므로 배열의 타입이 Interger[] 이어야 됨 + [다른 방법] int A[] = {5,4,3,2,1}; Integer[] tmp = Arrays.stream(A).boxed().toArray(I..

1. 그래프 DFS (check 기능 추가) private static void DFS(int start) { visited[start] = true; for(int i : A[start]){ // 인접 리스트로 받아서 start에서 연결된 모든 노드를 탐색 if(!visited[i]){ DFS(i); }else if(check[start] == check[i]){ // 방문한 곳이면 (+ 조건) IsEven = false; } } } 해당 노드(start)에서 DFS를 실행시킨다. 우선 현재 노드의 방문 배열을 true로 한다. 그리고 해당 노드의 인접 리스트를 한바퀴 돌면서 방문 안한곳이면 그 노드로 DFS 를 수행한다. 방문한 곳이면 check로 집합이 배정되어 있을테니 비교 후 같으면 IsEven..

1. 그래프 DFS 문제 접근 방법 우선 static 변수로 방문 배열과 그래프를 표현할 인접리스트를 선언한다. static boolean visited[]; static ArrayList[] A; // 가중치 있을 때는 ArrayList 배열의 원소 하나당 또 ArrayList를 넣어줘야함 visited = new boolean[n+1]; // 0번 인덱스는 안씀 A = new ArrayList[n+1]; for(int i = 1; i < n+1 ; i++){ A[i] = new ArrayList(); } 시작점과 종료점을 입력받아서 입력해준다. for(int i = 0; i < m ; i++){ st = new StringTokenizer(br.readLine()); int s = Integer.pa..

1. 스택 사용법 Stack stack = new Stack(); stack.push(5); // 삽입 stack.pop(); // 삭제 stack.clear(); // 전체 값 제거 (초기화) stack.peek(); // 상단 값 출력 stack.size(); // 사이즈 출력 stack.empty(); // 비어있는지 check stack.contains(1) // stack에 1이 있는지 check 2. StringBuffer StringBuffer bf = new StringBuffer(); bf.append("-\n"); bf.append("+\n"); System.out.println(bf.toString()); StringBuffer를 선언하고 append로 버퍼를 채운 후에 bf.toSt..

1. 코딩 테스트에서 문제를 보고 로직이 생각나자마자 바로 구현하지 말고 꼼꼼하게 문제의 조건을 파악하고 방향을 설정하자. 2. N 자리의 수를 입력 받을 때, N의 범위가 (1 정수 바꾸고 싶을때는 Integer.parseInt() 사용) 7. 합배열이나 곱배열 다룰 때는 습관적으로 long 배열을 선언해라 8. N의 최댓값이 10,000,000 이라 엄청 크므로 이때는 O(nlong) 시간 복잡도 알고리즘도 위험할 수 있으므 O(n)을 써야한다 이런 경우에 자주 사용하는 방법은 투 포인터임. (많이 풀다보면 한번쓰면 없어지는 유니크한 경우네 그리고 두개를 뽑아서 값을 만들면 되는구나 -> 투 포인터가 떠오르게 됨) 예시) 투 포인터 이동 원칙 - sum > N : sum = sum - start_in..