목록알고리즘 (266)
Dev.baelanche
감이 안와서 질문게시판을 참고했다. 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..
문제에서 요구하는대로만 하면된다;; public class Main { static int max = 0; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int people = 0; for(int i=0; i b ? a : b; } }
30의 배수인지를 확인하려면 두가지를 검사하면 된다. 1. 수에 0이 적어도 1개 있어야 한다. 2. 각 자리수의 합이 3의 배수여야 한다. 위 두가지를 만족한다면 각 자리수를 내림차순으로 정렬하여 출력해주면 된다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); char c[] = sc.next().toCharArray(); Integer a[] = new Integer[c.length]; for(int i=0; i
문제에 알고리즘 힌트가 있다. 연구소 크기가 최대 8*8 이다. => 완전탐색 가능 인접한 위치로 바이러스가 퍼진다 => 그래프 이러한 이유로 완전탐색 + BFS 로 풀었다. 풀이는 다음과 같이 진행했다. 1. 연구소 배열에 벽을 세운다. 2. BFS 로 바이러스를 퍼트린다. 3. 빈 칸의 개수를 세어 최대값을 저장한다. 4. 반복한다. 백트래킹을 활용해본 적이 없어서 벽을 세우는 방법이 좀 까다로웠다. public class Main { static int n; static int m; static int a[][]; static int temp[][]; static int max = 0; public static void main(String[] args) { Scanner sc = new Scann..
배열의 최대길이가 20이므로 전 구간을 완전탐색한다. 처음에 좀 헤맸는데 재귀를 쓰라는 힌트를 보고 풀었다. 메모이제이션 기법만 안썼지 구현방법은 dp 와 다를게 없다. public class Main { static int n; static int s; static int a[]; static int cnt = 0; public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nextInt(); s = sc.nextInt(); a = new int[n]; for(int i=0; i= n) return; sum += a[idx]; if(sum == s) cnt++; recursive(idx + 1, sum - a[..