no image
JAVA [Algorithm] - 백준 15650 N과 M (2)
📝문제 설명 📢입출력 예시 ✏️문제 풀이이 문제 또한 예제 2번의 출력을 보며 규칙을 이해해보자.(1,2)와 (2,1)은 같은 경우로 취급하여 출력을 안한다.똑같이 (2,4)은 (4,2)와 같은 경우로 취급하여 출력을 안한다. 이제 그림으로 이해해보자 그림을 잘 보면 depth 0일 때의 재귀함수에서 depth 1로 넘어갈 때십의자리수의 값에서 +1 한만큼 일의자리수에 넣어주는 것을 볼 수 있다. 이러면 다음 재귀함수로 넘어갈 때 십의 자리수에 채워진 어떤 변수 값을 depth 1로 +1만큼 더하고 가져가야 한다. package Baekjoon.BackTracking;import java.io.BufferedReader;import java.io.IOException;import java.io.Inp..
2025.01.06
no image
JAVA [Algorithm] - 백준 15649 N과 M (1)
📝문제 설명 📢입출력 예시 ✏️문제 풀이예제 2번을 보면서 고민을 해보자.예제 2번의 출력의 경우의 수는 아래 그림과 같다.  규칙을 보면 십의자리수에 있는 숫자는 일의자리수에 올 수 없다는 것을 알 수 있다.백트래킹 문제는 재귀함수로 풀어지기 때문에 visited 배열을 사용하여 십의 자리숫자에 있는 자리를 true로 처리하여 방문하지 못하게 막아 놓으면 될 것 같다. depth 값을 추가하여 배열의 인덱스 네비게이션 역할을 할 것이다.십의 자리수가 채워지는 재귀함수에는 depth를 0,일의 자리수가 채워지는 재귀함수는 depth를 1로 하여 값을 채워보자. package Baekjoon.BackTracking;import java.io.BufferedReader;import java.io.IOEx..
2025.01.06
no image
JAVA [Algorithm] - 백준 1010 다리 놓기
📝문제 설명  📢입출력 예시 ✏️문제 풀이1. 다리는 1:1 매칭으로만 연결 가능하다.2. 크로스로 다리가 겹치면 안된다. N M개에서 다리를 놓을 포인트를 정해야 하고 즉, M개 중 N개를 선택해야 한다. 이는 조합 공식으로 mCn을 사용하면 된다. 예를 들어 (1,2,3,4)에서 (2,1,4)를 뽑았다 가정하면 이는 (1,2,4)나 (4,2,1) 처럼 순서가 다르게 뽑혀도 조합은 뽑는 순서를 고려하지 않기에 이 모두 1개의 경우로 본다. 위 그림처럼 왼쪽은 불가능하고 왼쪽은 가능하다. 왼쪽에서는 (2,1,4)가 오른쪽에서는 (1,2,4)가 뽑혔지만 조합의 경우는 이 둘 다 하나의 경우로 본다.결국 조합 공식을 사용하면 서로 다른 다리가 겹치는 경우는 제외될 수밖에 없다. 공식으로 확인하자면 r! ..
2024.12.29
no image
JAVA [Algorithm] 조합론 - 이항 계수
이항 계수란?조합의 수학적 표현으로, n개의 원소 중에서 r개의 원소를 선택하는 경우의 수를 의미한다.2를 상징하는 '이항'이라는 말이 붙은 이뉴는 하나의 아이템에 대해서는 '뽑거나', '안뽑거나' 두 가지의 선택만이 있기 때문이다.예를들어 5개의 카드에서 3개의 카드를 중복 없이 순서에 상관없이 뽑는 경우의 수를 계산할 때 조합을 사용할 수 있다. 수학에서 이항계수는 이항(두개의 항) 정리에서 계수로 나타나는 양의 정수를 뜻하는데, 보통 n ≥ k ≥ 0의 정수 쌍으로 나타낸다.계수: 일반적으로 어떤 변수에 곱해진 인자ax^2 + b: 계수는 a, 변수는 x, 차수는 2, 상수는 b를 의미한다. 이항계수는 위와 같이 나타낼 수 있는데 이는 우리가 아는 아래와 같은 조합 공식을 볼 수 있다.여기서 (n/..
2024.12.29
no image
JAVA [Algorithm] - 백준 1158 요세푸스 문제
📝문제 설명 📢입출력 예시 ✏️문제 풀이처음에는 boolean 배열을 사용해 true, false 처리를 하여 인덱스 값을 응용해 사용하려 했지만, 제거 되는 문자가 적어질 수록 조건이 까다로워 다른 방법을 생각 K번째 사람들 제거하는 방법이면, 큐를 사용해 K-1번만큼 앞에 있는 숫자들을 뒤로 보내고, K번째를 poll하여 출력한다. K = 3 일때{1 2 3 4 5 6 7} 이렇게 있다면 K=1 {2 3 4 5 6 7 1}K=2 {3 4 5 6 7 1 2}K=3 {4 5 6 7 1 2} -> 3출력 K=1 {5 6 7 1 2 4}K=2 {6 7 1 2 4 5}K=3 {7 1 2 4 5} -> 6출력 이런 식으로 뒤로 보내는 방법을 사용했다. import java.io.BufferedReader;i..
2024.12.19
no image
JAVA [Algorithm] - 백준 1193 분수 찾기
📝문제 설명 📢입출력 예시 ✏️문제 풀이순서는 이런 방향으로 되어 있다.여기서 한 번 더 생각하면  대각선으로 분모와 분자의 합이 홀수이면 아래로 내려가는 방향분모와 분자의 합이 짝수이면 위로 올라가는 방향이 그려지게 된다. 그렇다면 완전 탐색을 사용하여 홀, 짝일 때의 경우의 수에 각 칸마다 반복문을 돌려주고 그 값에 count++를 해준 뒤, 입력 값과 똑같다면 값을 출력해주면 된다.  빨간색 숫자는 첫 반복문으로 i 값이 되고, 이 i값은 분모와 분자의 합이 홀, 짝인지 판단하는 값이 될 것이다.주황색 숫자는 i값에 대해 두 번째 반복문으로 j=1부터 i값까지 반복문을 돌려주며, count 값을 증가시킨다. package Baekjoon.Simulation;import java.util.Scan..
2024.12.19
no image
JAVA [Algorithm] - 백준 2563 색종이
📝문제 설명 📢입출력 예시 ✏️문제 풀이- 겹친 부분을 제외한 넓이를 구하는 문제이다.- 겹친 부분을 구하고 전체 넓이에서 빼려고 했지만, 조건들이 까다로워 브루트 포스 방식을 사용하기로 했다.- 주어진 x, y좌표에서부터 x+9, y+9만큼까지의 범위에서 방문했다면 넓이값 +1 을 해주는 방식을 사용했다.package Baekjoon.BruteForce;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Baek2563 { public static void main(String[] args) throws ..
2024.12.19
no image
JAVA [Algorithm] - 백준 2206 벽 부수고 이동하기
📝문제 설명 📢입출력 예시 ✏️문제 풀이정답 코드package Baekjoon.Graph;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.LinkedList;import java.util.Queue;import java.util.StringTokenizer;public class Baek2206_1 { static int N, M; static int[][] map; static boolean[][][] visited; static int[] dx = {-1, 0, 1, 0}; static int[] dy = {0, 1, 0, -1}..
2024.12.18