"꾸준하고 완벽한 한 걸음"

Brute-Force 21

[백준 28238] 정보 선생님의 야망 [Java]

문제https://www.acmicpc.net/problem/28238 풀이주어진 N명의 학생들의 시간표를 보고 가장 많은 학생들이 두 번의 수업에 참여할 수 있는 날과, 참여할 수 있는 인원을 구하는 문제다.학생의 수와 요일의 곱이므로 모든 경우를 다 생각해볼 수 있다.모든 경우에 대한 합을 구하고, 합이 갱신될 때 마다 두 요일을 기록해두면 된다. // Solve int a = -1, b = -1; int max = -1; for (int i = 0; i max) { a = i; b = j; max = cnt; } ..

[백준 15658] 연산자 끼워넣기 (2) [Java]

문제https://www.acmicpc.net/problem/15658 풀이배열 A에 대해 주어진 연산자를 활용해 만들어지는 모든 식의 결과 중 최대/최소값을 구하는 문제다.중간값과, 다음에 계산할 요소의 인덱스를 넘겨주는 방식으로 풀이했다.만약 인덱스가 A의 길이와 같다면 더 이상 연산할 요소가 없기 때문에 연산을 중단하고 결과를 갱신했다. private static void bt(int temp, int nextIdx) { if (nextIdx == A.length) { max = Math.max(max, temp); min = Math.min(min, temp); return; }아직 연산할 요소가 남아있는 경..

[백준 01639] 행운의 티켓 [Java]

문제https://www.acmicpc.net/problem/1639풀이주어진 문자열 S에 대해 2N자리의 부분 문자열의 각 자리를 더했을 때 왼쪽과 오른쪽 N자리의 합이 동일한 부분 문자열의 최대 길이를 구하는 문제다.우선 S의 길이에 따라 가능한 최대 크기를 정해주자.홀수면 1을 빼고, 짝수면 원래 크기 그대로 최대 크기가 될 수 있다. // Solve int GAP = nums.length % 2 == 0 ? nums.length : nums.length - 1;길이가 홀수인 정답은 없으므로 GAP이 0이 될 때 까지 2씩 감소시키며 문제의 조건을 만족시키는 부분 문자열을 찾으면 된다. while (GAP > 0) { for (int i = ..

[백준 25594] HG 음성기호 [Java]

문제https://www.acmicpc.net/problem/25594 풀이문자열 S가 사전에 주어진 매핑표의 문자열들로 구성되어있는지 확인하는 문제다.직관적인 매핑을 위해 Map으로 매핑 테이블을 만들었다.단순히 문자열 배열로 만든 후 아스키코드값을 인덱스처럼 활용하는 방법도 있다. // Solve Map map = new HashMap(); map.put('a', "aespa"); map.put('b', "baekjoon"); map.put('c', "cau"); map.put('d', "debug"); map.put('e', "edge"); map.put('f', "firefox"); m..

[백준 05568] 카드 놓기 [Java]

문제https://www.acmicpc.net/problem/5568 풀이N개의 카드 중 K개를 골라서 만들어지는 숫자의 종류를 세는 문제다.고르는 순서에 따라 숫자가 달라지기 때문에 순열을 사용했다. for (int i = 0; i 만약 K개를 모두 골랐다면, 하나의 문자열로 합치고 집합에 추가하면 된다. private static void permutations(List permutation) { if (permutation.size() == K) { StringBuilder sb = new StringBuilder(); for (String num : permutation) { sb.append(num)..

[백준 01025] 제곱수 찾기 [Java]

문제https://www.acmicpc.net/problem/1025 풀이N*M 의 보드에서 행과 열이 등차수열을 이루는 칸들의 숫자를 이어 붙여 만든 수가, 어떤 정수의 제곱수 중 가장 큰 제곱수를 찾는 문제다.만약 찾지 못했다면 -1을 반환해야 한다. int res = -1; for (int i = 0; i 행과 열에 대한 등차수열이기 때문에 각 위치에 2N * 2M 범위에 대한 등차수열을 찾으면 된다. for (int dx = -N; dx 만약 증가값이 둘 다 0이라면 탐색이 불가능하므로 유의하며, 숫자를 이어 붙인 후 가장 큰 제곱수를 찾아주면 된다. if (dx != 0 || dy != 0) { ..

[백준 14007] Small Weird Measurements [Java]

문제https://www.acmicpc.net/problem/14007 풀이주어진 시퀀스에 대해 문제에서 주어진 이상한 구간의 수를 구하는 문제다.이상한 구간은 다음과 같다.자기 자신은 이상한 구간이 된다.이전 요소의 차와 현재 요소의 차가 부호가 다르면 이상한 구간이 된다. // Solve int cnt = N; for (int i = 0; i 요소의 차가 0이거나, 이전 요소의 차와 현재 요소의 차가 동일할 때는 이상한 구간이 아니게 된다.위 조건문을 통해 이상한 구간이 맞다면 탐색을 중단하고, 다음 구간에 대한 탐색을 진행하자. if (diff == 0 || prevDiff != 0 && diff * prevDiff > 0) { ..

[백준 20410] 추첨상 사수 대작전! (Easy) [Java]

문제https://www.acmicpc.net/problem/20410 풀이입력으로 주어지는 m, Seed, $X_1$, $X_2$에 대해X1 = (a × Seed + c) % mX2 = (a × X1 + c) % m을 만족하는 a, c를 출력하면 된다.a, c의 범위는 0 ~ m - 1 이며 m은 100이하의 소수이므로 완전 탐색으로 풀이가 가능하다. for (int a = 0; a 소스코드https://github.com/rogi-rogi/problem-solving/blob/main/baekjoon-online-judge/practice/20410.java

[백준 03980] 선발 명단 [Java]

문제https://www.acmicpc.net/problem/3980 풀이11명의 선수들이 각 포지션에서의 적합한 능력치를 바탕으로 모든 포지션에 배치했을 떄, 선수들의 최대 능력치 합을 구하는 문제다.완전 탐색을 통해 충분히 구할 수 있으나, 여러 TC가 존재하기 때문에 최적화를 진행해야 한다.한 선수는 11개 중 최대 5개의 포지션에 대한 능력치를 가질 수 있다.따라서 능력치가 0보다 큰 경우에 대해서만 탐색하면 된다. private static int bt(int sum, int i) { if (i == 11) { return sum; } int res = 0; for (int j = 0; j 0) { ..

[백준 12571] Rope Intranet (Small) [Java]

문제https://www.acmicpc.net/problem/12571 풀이선분의 양쪽 끝 위치 정보가 주어졌을 때, 선분들의 교차점을 모두 세는 문제다.N은 2이하로, 단순 비교를 통해 선분의 시작점에 대해 교착점을 탐색하면 된다. // Solve if (N == 1) { sb.append(String.format("Case #%d: 0\\n", t)); } else { final int A1 = input[0]; final int B1 = input[1]; input = Arrays.stream(br.readLine().split(" "..