
내가 보려고 정리하는 완탐. 완탐완탐하는데 도대체 완탐이 뭔가 할 때가 있다. 브루트포스도 마찬가지. 말 그대로 모든 경우의 수를 살펴보겠다는 뜻. 대표적으로 순열, 조합, 부분집합이 있다. 코테에서 문제 풀 때 정말 많이 사용하는 방법이다. 한번 유형을 익히면 풀이에 굉장히 쉬워진다. 완전탐색(Exhausitve Search)는 모든 경우의 수를 생성하고, 실행해 답을 구하는 기법이다. Brute-Force로 많이 불린다. 상대적으로 빠른 시간에 문제를 해결할 수 있지만 경우의 수가 많으면 시간 초과가 날 가능성이 높아진다. 그래서 우선 완전 탐색으로 접근하여 답을 도출하고, 성능 개선을 위해 다른 알고리즘을 적용하여 리팩토링 하는 것이 좋다 순열(Permutation) 조합(Combination) 부..

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(2^n) < O(n!) 이런 시간복잡도를 가지고 있다. 시간복잡도는 간단하게 한 input이 output으로 나오는 시간이라고 생각하면 된다. 예를 들어, for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) int sum += temp[i][j] // 결과는 O(n^2) 알고리즘을 풀 땐 1초에 1억번의 연산이 가능하다고 생각하면 편하다. 만약 입력이 10,000이다. 만약 2중 for문을 쓴다고 하면 일만 * 일만 = 100,000,000 총 1억의 시간복잡도를 갖게 된다. 보통 백준같은 코딩 사이트에선 제한시간이 1초이니 이중 반복문을 사용할 때 가능한 건 입력이 10,000..

\자바 표준 입출력엔 3가지가 있다. System.in System.out Sysytem.err System.in은 InputStream 형태이다. 그래서 보통 InputStream을 상속한 클래스로 객체를 생성한다. 표준 입력 장치 객체를 가리킨다. System.out은 표준 출력 장치, System.err는 표준 에러 출력 장치이다. System.err로 에러를 출력하면 빨간 글자로 표시된다. 자바에선 데이터를 입력하는 방식이 InputStream, Reader 크게 두가지로 나누어진다. InputStream은 1byte씩 입력받고, Reader는 char(2 byte)씩 입력받는다. System.in은 InputSteam 계열로 1byte씩 읽어드리는데, 한글은 2바이트이므로 이 방식으로 읽을 수 ..