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

Brute-Force 17

[백준 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(" "..

[프로그래머스] 카펫 [Java]

문제https://school.programmers.co.kr/learn/courses/30/lessons/42842풀이brown은 중앙에 위치한 직사각형 yellow를 한 줄로 감싸야 한다.때문에 가로의 최대 길이는 (brown - 2) / 2가 된다.가로를 한 칸씩 줄일 때마다 중앙에 위치한 yellow의 높이는 1씩 증가한다.이 과정을 반복하며 만들어지는 테두리 내부에 모든 yellow를 저장할 수 있을 때 까지 탐색하면 된다.소스코드보기

PS 2025.02.21

[백준 22943] 수 [Java]

문제https://www.acmicpc.net/problem/22943 풀이0 ~ 9 중에서 서로 다른 K개를 골라 만들 수 있는 수 중 다음을 만족하는 수를 구해야 한다.서로 다른 두 개의 소수의 합으로 나타낼 수 있어야 하고,M으로 나누어 떨어지지 않을 때 까지 나눈 수가 두 개의 소수의 곱인 경우이어야 한다.구현할 부분이 많지만, 하나씩 해결해보자.0 ~ 9로 K자리 수 만들기우선 0 ~ 9 중 K개를 골라 수를 만들어야 한다.숫자를 한 번씩 만 사용해야 하고, 첫 번째는 0이 올 수 없다. private static void solve(int digit, int num) { if (digit == 0) { // base case } fo..

[백준 02436] 공약수 [Python]

문제https://www.acmicpc.net/problem/2436 풀이두 수 A, B의 GCD, LCM이 주어질 때, 두 수의 합이 최소가 되는 수를 구하는 문제다.이때 두 수의 범위 2 ~ 1억에 대해 GCD, LCM을 전부 구해 비교하는 방법은 시간 초과가 발생한다.탐색 범위를 좁혀보자.$G = GCD(A, B), L = LCM(A, B)$일 때, $AB = GL$, $A = Gx$, $B = Gy$이므로 $AB = G^2xy = GL, xy = \frac{L}{G} = K$가 성립한다.K의 모든 약수 쌍 중 $GCD(A, B) = G*GCD(x, y)$를 만족해야 하므로, $GCD(x, y) = 1$인 약수만 해당된다. K = LCM // GCD x, y = 0, 0 for d ..

[백준 28288] Special Event [Java]

문제https://www.acmicpc.net/problem/28288풀이가로, 세로가 5 * N으로 이루어진 일정을 참고해, 각 열에 존재하는 'Y'의 비율 가장 많은 요일을 출력하는 문제다.만약, 각 일정이 가지는 Y의 수가 동일한 경우 ','를 구분자로 같이 출력해주면 된다.우선, 문자열 결합을 쉽게 하기 위해 StringJoiner를 사용했다.이후 입력받은 char 배열에 대해 각 열에 존재하는 Y의 개수를 cnt 배열에 기록해주자.동시에 최대 개수를 따로 기록해주자.이제 cnt 배열에서 기록한 최대 개수와 동일한 개수의 Y가 존재하는 일정을 구분자와 결합해 출력하면 된다.소스코드보기