목록Java (18)
-
구글 프로토콜 버퍼 사용하기 위한 환경구성!(리눅스에서) 사전 준비사항특정 버전 이상의 gcc가 깔려있어야 한다. gcc는 컴파일하기가 매우 오래 걸리기 때문에... http://www.snoopybox.co.kr/1754 위 경로를 참고하여 devtoolset 설치를 하면 높은 버전의 gcc를 까는 것 보다 빠르게 진행할 수 있다. 1. protocol buffer 소스 다운로드 - https://github.com/google/protobuf/releases - 위 경로에 들어가 protobuf-java-3.5.1.tar.gz을 다운받는다. 2. install protocol buffer - https://github.com/google/protobuf/tree/master/java - 위 경로에 들..
문자열 비교하는데 쓰이는 equals!! equals를 사용하는데 간단한 팁이 있다면~ 1var.equals("test");cs요런 형식 보다 1"test".equals(var);cs요런 형식을 쓰는 게 좋다고 한다. 왜냐하면~변수 var에 null값이 전해질 수 있기 때문이다. 그래서 1var.equals("test");cs이렇게 쓰면, 에러가 날 수 있는데 1"test".equals(var);cs이렇게 쓰면 위 상황에서 발생할 수 있는 에러를 피할 수 있다 간단한~~팁!!
불https://www.acmicpc.net/problem/5427 예외사항 : 13 3* . .@ * .* . . 위와 같은 상황을 처리하지 못했음.12345678910111213141516171819for(int i = 0; i
역사https://www.acmicpc.net/problem/1613 [문제 풀이]첫 줄에 있는 사건의 개수 n과 전후관계 개수 k을 입력받는다.map[n][n] 배열을 생성한 후전후관계 k개(row, col 형태)를 입력받는데map[row][col] = -1map[col][row] = 1이렇게 설정한다. 예제로 입력된 정보를 토대로 맵을 생성해보면 -1-1 1 -1 -1 1 1 -1 11 이런 형태의 맵이 나오게 된다.이 상태에서 플로이드 와샬 알고리즘을 사용하여 완전탐색을 하면 된다. if(map[row][k] != 0 && map[row][k] == map[l][col]){map[row][col] = map[row][k];} 0-1-1-1010-1-10110-101110000000 탐색결과 위와 같..
제곱 ㄴㄴ 수https://www.acmicpc.net/problem/1016 [문제 풀이] min과 max의 범위를 살펴보면, 1
연속합 1912https://www.acmicpc.net/problem/1912 [문제 풀이]dp[i]를 index가 i일때의 연속합이라고 정의하면 dp[i] = max(ar[i], dp[i-1]+ar[i])이런 점화식을 구할 수 있다. 우선 10개의 숫자가 입력됐을 때 방금 구한 점화식으로 연속합을 구해보면index 1 2 3 4 5 6 7 8 9 10 입력 10 -4 3 1 5 6 -35 12 21 -1 연속합10 6 9 10 15 21 -14 12 33 32 표와 같고, 연속합의 최댓값은 index가 9일때 33(12+21)이라는 것을 알 수 있다. 계산을 모두 마친 후, dp배열에 저장된 연속합들 중 가장 큰 값을 출력하면 끝!! 1234567891011121314151617181920212223..
자두나무 2240 https://www.acmicpc.net/problem/2240 [문제 풀이]dp[T][W] 2차배열 생성하고,dp[T][W]는 T초에 W번 이동했을 때 먹은 자두의 개수 라고 했을 때W % 2 == 0일때 dp[i][j] = jadu[i] == 1 ? Math.max(dp[i-1][j-1] + 1, dp[i-1][j]+1) : dp[i-1][j];W % 2 == 1일때 dp[i][j] = jadu[i] == 2 ? Math.max(dp[i-1][j-1] + 1, dp[i-1][j]+1) : dp[i-1][j]; 연산을 마치고 dp[T][0] ~ dp[T][W] 중 최댓값 출력 123456789101112131415161718192021222324252627282930313233343..
1학년 5557https://www.acmicpc.net/problem/5557 [문제 풀이]눈여겨 볼 점은 계산을 하다보면 범위가 int형 범위를 넘어갈 수도 있다는 점.상근이가 아는 수는 다행히 0부터 20까지라는 점이다. 1. 숫자의 개수 N을 입력받고 2. 다음 줄에 나오는 N개의 숫자를 long형 ar[]배열에 집어넣는다. 3. 2차원배열 dp[N+1][21]를 생성한다. 어떻게 풀어나갈 생각이냐면.... dp[i][j]를 'i번째 수 까지 계산을 했을 때 j를 만들 수 있는 경우의 수'로 생각한다. 예를들어, dp[1][8] = 1 (8 = 8) dp[2][5] = 1 (8 - 3 = 5) dp[2][11] = 1 (8 + 3 = 11) 이다. 4. dp[i-1][]와 dp[i][]와의 관계를..
경로 찾기 11403https://www.acmicpc.net/problem/11403 [문제 풀이] 이 문제를 푸는 방법은 여러 가지가 있다. 나는 bfs, dfs, 플로이드 와샬 알고리즘 중 플로이드 와샬 알고리즘을 이용해 풀었다.플로이드와샬 알고리즘은 형태가 정해져있기 때문에 모든 경로를 탐색하는 문제에 적용하기 쉬운 것 같다. 1. 모든 입력은 0과 1로 이루어져있다. 나는 입력을 받은 후 int형으로 바꾸지 않고 String형 그대로 map에 저장했다. 2. 정점 r에서 k로 가는 경로가 존재하고, 정점 k에서 c로 가는 경로도 존재한다면 정점 r에서 c로 가는 경로 또한 존재한다고 볼 수 있기 때문에 map[r][c]를 1로 설정해 주면 된다. 3. 탐색을 모두 마치고 출력하면 끝. 12345..
K번째 수 11004https://www.acmicpc.net/problem/11004 [풀이]숫자의 최대 입력 개수가 꽤 크다.수 정렬하기 3번 문제가 생각나서 비슷하게 풀려고 했으나 입력받은 수의 범위가 -10^9 < A < 10^9여서 포기.정렬 하면 분명히 시간초과걸릴텐데.... 하며 고민하던 중퀵소트를 변형해서 풀어보기로 했다. 설명하기가 좀 애매한 관계로 소스코드를 참고해 보자 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162import java.io.BufferedReader;import java.io.InputStreamReader;i..