전체 글(101)
-
[BOJ] 2977. 폭탄제조
https://www.acmicpc.net/problem/2977 접근 방법 문제를 보고 폭탄의 갯수가 정해져있다면 어떨까 라는 것을 먼저 생각해보았다. IF) 폭탄을 100개 만들어 본다면 → 가지고 있는 것을 빼고 난 뒤 필요한 제품을 사야 할 것이다. 여기서 중요한 것은 그것을 살 돈이 있는가? 이다. 따라서 폭탄의 갯수의 증감에 따라 답이 도출 되기 때문에 이분 탐색을 사용하기로 했다. 먼저 변수명을 보면 이렇게 되있다. 각 설명은 주석을 달아 두었다. static int N; // 폭탄 제조에 필요한 부품 갯수 static int M; // 현재 가지고 있는 돈 static int[] needList; // N번째 폭탄의 부품에 폭탄 1개를 만들 때 필요한 갯수 static int[] haveP..
2020.08.11 -
[BOJ] 17135. 캐슬 디펜스
https://www.acmicpc.net/problem/17135 접근 방법 그대로 구현을 해주면 된다. 궁수의 위치에 따라서 조합을 써서 배열에 궁수의 위치를 넣어주었다. static void sortArcher(int[] arr, boolean[] visited, int depth, int r) { if (r == 0) { tempMap = new boolean[N+1][M]; archers = new ArrayList(); for(int i=0; i
2020.08.10 -
[BOJ] 17143. 낚시왕
https://www.acmicpc.net/problem/17143 접근 방법 그대로 구현을 해주면 된다. 상어가 움직일 때마다 구현해야 하는 부분이 쪼금 애먹였다. 더 쉬운 방법이 있을거 같았는데 해야 될 것들이 너무 많아서 빠르게 진행하였다. ( 정처기 시험... ) 애먹인 부분만 보도록 하자. ( 상어가 움직일 때 배열의 크기를 벗어 날 때의 코드이다. ) if(nx >= R){ if( (nx / (R-1)) % 2 == 1 ){ sharks.get(i).direction = 0; nx = (R-1) - (nx % (R-1)); }else { nx = nx % (R - 1); } } if(nx < 0){ if( (nx / (R-1)) % 2 == 0 ) { sharks.get(i).direction..
2020.08.09 -
[BOJ] 4991. 로봇 청소기
https://www.acmicpc.net/problem/4991 접근 방법 어려웠었다.. 처음에는 그냥 BFS만 사용을 해서 차근차근 가까운 순서대로 먼지를 먹어주면 되는 줄 알았다. 하지만 구현은 완벽했지만 틀리는 것을 보고 아래의 힌트를 보았더니 ' 순열 ' 이 포함 되어 있는 것을 보고 이 문제의 핵심은 청소기가 먼지를 먹는 순서에 따라 결과 값이 달라진다는 것을 알았다. 푸는 방식은 이렇게 했다. 입력 값을 받을 때 모든 먼지들의 값을 배열에 따로 저장을 한다. 각각의 먼지들의 거리를 BFS로 구한다. /** * 각각의 먼지를 구한 값 * dust_dist[0][1] -> 이 뜻은 먼지들의 배열에서 0 에서 1로 갈 때의 distance의 값이다. **/ static void ge..
2020.08.06 -
[BOJ] 1038. 감소하는 수
https://www.acmicpc.net/problem/1038 접근 방법 오랜만에 동적 프로그래밍 문제를 풀려니 어려웠었다.. 처음 접근 방법은 숫자들을 증가시키면서 이 숫자가 감소하는 숫자인지 확인해보았다. 당연히 이 방법은 시간초과가 났다... 그래서 구글링을 해서 찾아본 결과 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}의 각 부분 집합을 이용해 만들 수 있는 감소하는 수는 각각 1개이다. 예를 들어, {1, 4, 7, 9} 라는 부분 집합을 이용해서 만들 수 있는 감소하는 수는 9741 단 하나이다. 이것이 힌트이다. 그렇다면 이제 어떻게 하면 감소하는 수를 찾을 것 인가? 가 남았다. 먼저 0~9까지의 숫자를 받아서 [감소하는 수] + [감소하는 수의 맨 뒷자리의 수보다 작은 수] ..
2020.08.04 -
[BOJ] 15686. 치킨 배달
https://www.acmicpc.net/problem/15686 접근 방법 입력 값에서 그냥 ArrayList에 집 and 치킨집을 넣어주었다. 그리고 치킨집에 대해서는 아직 개장을 한지 안한지에 대해서 state 필드를 주었다. 그리고 치킨집을 하나 고를 때 마다 문제에서 원했던 ' 치킨 거리 ' 를 구하고 답에 계속 최소인지 확인하면서 대입을 해주었다. 주의 사항 치킨 집을 하나씩 넣어줄 때 (0,1) (2,0) 은 (2,0) (0,1) 은 중복이 된다. 이 중복을 없애자. 또한 for(int i=start; i
2020.08.03