Dev.baelanche
메모이제이션 + 탐색을 요구하는 문제다. 1. 경로의 개수가 21억즈음이므로 메모이제이션 없이 돌리면 시간초과가 난다. 2. 아래, 오른쪽으로 가는 경로의 개수를 합하면서 이동하기 때문에 dp 배열은 long으로 해줘야 한다. 3. 게임판 배열은 0
상, 하, 좌, 우, 위, 아래로 퍼진다는 것만 유의하며 BFS 를 하면 된다. int dh[] = {0, 0, 0, 0, -1, 1}; //위, 아래 int dn[] = {-1, 1, 0, 0, 0, 0}; //상, 하 int dm[] = {0, 0, -1, 1, 0, 0}; //좌, 우 나는 이렇게 해결했다. 처음부터 모두 익어있다면 0, 모두 익지 못한다면 -1이 출력되는 부분을 따로 예외처리 해주었다. int cnt = -1; //기본 카운트 while(!q.isEmpty()) { //로직 수행 cnt++; } for() { //토마토 배열 체크 } //딱 한번 수행되고 멈추었다면 안익은 토마토가 없다는 뜻이므로 0 출력 //토마토 배열을 체크하여 안익은 토마토가 있다면 -1 출력 //모두 익었다..
네개의 값을 다음과 같은 방법으로 구했다. 산술평균 : 입력받을 정수들을 모두 더해 n으로 나누어 반올림 중앙값 : 배열을 정렬해 가운데 배열의 값을 출력 최빈값 : 인덱스, 빈도 횟수를 담은 클래스를 만들어 정렬한 후 최빈값(여러 개 일시 두번째 값) 출력 범위 : 최대값 - 최소값 public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int n = In..
n이 10000이하이므로 10000까지의 소수를 저장해 놓는다. 두 소수의 차이가 가장 작아야 하므로 n/2를 기준으로 반복문을 돌며 소수 쌍을 찾아냈다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); int prime[] = new int[10001]; for(int i=2; i0; i--) { if(prime[i] == 0 && prime[n-i] == 0) { System.out.println(i + " " + (n-i)); break; } } } } }
감이 안와서 질문게시판을 참고했다. 1. 행렬 A, B 를 비교한 정보를 담은 배열 C를 만든다. (일치하면 false, 불일치하면 true 로 진행했다.) 2. 0, 0 부터 n-3, m-3 까지 3*3 크기로 탐색한다. - 탐색이 끝났을때 C의 각 배열 정보가 모두 일치해야 문제의 조건을 만족한다. 2-1. 탐색할때 첫번째 인덱스가 false(일치)라면 원소 값을 뒤집을 필요 없다. 글로만 쓰자니 힘들어서 주석을 달아놓았다. public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Buff..
-부호가 나오면 다음 -부호가 나올때까지 괄호를 다 치면 된다. 따라서 한번이라도 -부호가 나오면 그 뒤로는 전부 빼기를 하면 최솟값을 구할 수 있다. public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); String s = "+" + br.readLine(); char c[] = s.toCharArray(); int sum = 0; String temp ..
기타줄 6개 짜리 우선 구입 > 6개 짜리의 개수를 줄임 > 낱개 구입 순으로 각 케이스마다 돈의 최솟값을 그리디하게 찾아야 한다. 예를 들면, n = 13, m = 1 6개 패키지 = 100 낱개 = 10 일때, 패키지 2개 + 낱개 1개 = 210 패키지 1개 + 낱개 7개 = 170 패키지 0개 + 낱개 13개 = 130 순으로 진행하며 매번 최솟값을 갱신한다. 구입할 수 있는 브랜드가 여러개일때는 6개 패키지와 낱개 를 각각 다른 브랜드에서 구입할 수 있으므로 완전탐색으로 해결했다. public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new ..
선택한 사원의 서류 점수, 면접 점수의 순위가 모두 다른 지원자의 서류 점수, 면접 점수의 순위보다 밀리지만 않으면 채용된다. 완전탐색으로 구현하면 시간초과가 나므로 두 점수 순위 중 하나로 정렬한 후 나머지 한 순위만 비교해주면 된다. 구조체, 클래스로 점수를 묶어서 정렬해도 되고 배열의 인덱스로 정렬해도 된다. 필자는 입력받을때 정렬된 상태로 받았다. public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new Out..