백준 29

백준-10815번/숫자 카드 (java)

문제숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 가지고 있는지 아닌지를 구하는 프로그램을 작성하시오.입력첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 두 숫자 카드에 같은 수가 적혀있는 경우는 없다.셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 가지고 있는 숫자 카드인지 아닌지를 구해야 할 M개의 정수가 주어지며, 이 수는 공백으로 구분되어져 있다. 이 수도 ..

카테고리 없음 2024.10.05

백준-10610번/30 (java)

문제 이해 이 문제를 풀때 가장 중요한 점은 다음 과 같다.1) N는 최대 105개의 숫자로 구성 ==> Int나 Long으로 받을 수 없는 숫자 이므로 문자열로 바꾼후 배열에 숫자로 변환하여 넣어준다.2) 30의 배수가 되기 위한 조건 ==> 1의 자릿수가 0이고 각 자릿수의 합이 3의 배수이다.  문제 해결  숫자를 문자열로 입력받고 정수형 배열에 각 자릿수를 넣어준다.** 문자를 숫자로 바꿀때 ==> 문자의 아스키 코드에서 48을 빼준다. **String N = scanner.nextLine();int[] arr = new int[N.length()];int sum = 0;for(int i=0; i 오름차순 정렬했을때 arr[0]이 0이면 1의 자리숫자가 0이 될 수 있고, 각 자릿수의 합이 3의 ..

알고리즘/백준 2024.10.04

백준-2875번/대회 or 인턴 (java)

문제백준대학교에서는 대회에 나갈 때 2명의 여학생과 1명의 남학생이 팀을 결성해서 나가는 것이 원칙이다. (왜인지는 총장님께 여쭈어보는 것이 좋겠다.)백준대학교는 뛰어난 인재들이 많아 올해에도 N명의 여학생과 M명의 남학생이 팀원을 찾고 있다. 대회에 참여하려는 학생들 중 K명은 반드시 인턴쉽 프로그램에 참여해야 한다. 인턴쉽에 참여하는 학생은 대회에 참여하지 못한다.백준대학교에서는 뛰어난 인재들이 많기 때문에, 많은 팀을 만드는 것이 최선이다.여러분은 여학생의 수 N, 남학생의 수 M, 인턴쉽에 참여해야하는 인원 K가 주어질 때 만들 수 있는 최대의 팀 수를 구하면 된다.입력첫째 줄에 N, M, K가 순서대로 주어진다. (0 ≤ M ≤ 100, 0 ≤ N ≤ 100, 0 ≤ K ≤ M+N),출력만들 수..

알고리즘/백준 2024.10.03

백준-1931번/회의실 배정 (java)

문제 이해 N개의 회의 시작시간, 끝나는 시간이 주어질때  각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 구해주면 된다. 이 문제에서 가장 중요한 점은 각 회의들의 종료 시간이 빠른 순으로 정렬을 해야한다는 점이다.왜냐하면 종료시간 기준으로 오름차순 정렬을 해주면 회의가 빨리 끝나서 최대한 많은 회의를 진행하는 경우를 구할 수 있기 때문이다.  문제 해결 ex) 예제 입력111 43 50 65 73 85 96 108 118 122 1312 14  이것을 종료시간 기준 오름 차순으로 정렬해주면 다음과 같이 변한다.[1, 4][3, 5][0, 6][5, 7][3, 8][5, 9][6, 10][8, 11][8, 12][2, 13][12, 14] 1에 시작 ---> 4에 종료..  ..

알고리즘/백준 2024.08.23

백준-11047번/동전 0 (java)

문제 이해 N개 종류의 동전이 존재(각 종류별로 동전의 갯수는 충분히 존재함)이 동전들로 K원을 만들 수 있는 최소 동전의 갯수를 구하면 된다. 문제 해결 동전을 입력 받을때 오름 차순으로 입력받으므로 배열의 뒷부분(가장큰 금액의 동전)부터 연산에 포함해주면 최소한의 동전으로 K원을 맞출 수 있다.import java.util.Scanner;public class Problem11047 { static int N; static int K; static int[] arr; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int count=0; N=s..

알고리즘/백준 2024.08.21

백준-10026번/적록색약 (java)

문제 이해위 표와 같이 RGB로 구성된 그래프에서 색깔별 구역의 갯수를 구해주면 된다. 단, 적록색약의 경우 R과 G를 구분하지 않고 구역의 수를 구해준다.구역의 갯수를 구해주면 되므로 연결성분의 수를 구해줄때와 마찬가지로 BFS로 구현해봤다.문제 해결 BFS구현public static void bfs(int x, int y, char c){ Queue queue = new LinkedList(); queue.add(new int[]{x, y}); visit[x][y] = true; while(!queue.isEmpty()){ int[] point = queue.poll(); int pointX = point[0]; int pointY = poi..

알고리즘/백준 2024.08.13

백준-14225번/부분수열의 합(java)

문제 이해문제수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오.예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들 수 있다. 하지만, 4는 만들 수 없기 때문에 정답은 4이다.입력첫째 줄에 수열 S의 크기 N이 주어진다. (1 ≤ N ≤ 20)둘째 줄에는 수열 S가 주어진다. S를 이루고있는 수는 100,000보다 작거나 같은 자연수이다.출력첫째 줄에 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 출력한다. 주의할 점 : 수열 S를 이루고 있는 숫자가 100,000보다 작거나 같은 자연수, 수열의 크기는 최대 20 ==> 수열의 합으로 ..

알고리즘/백준 2024.08.02

백준-1991번/트리순회(java)

문제 이해 자바를 통해 트리를 구현하고 전위순회, 중위순회, 후위순회를 구현해 보았다.파이썬으로는 구현해본 경험이 있지만 자바로는 처음 구현해보아서 약간 생소했다.  이 문제를 풀기 위해서 가장 중요한 것은 노드를 삽입을 구현하는 것이다. 문제 해결 우선 트리를 구현하기 위해서 Node 클래스를 만들어 준다. 필드값1) data ==> 노드가 가지고 있는 데이터2) left ==> 왼쪽 자식 노드3) right ==> 오른쪽 자식 노드 static class Node{ private char data; private Node left; private Node right; Node(char data) { this.data = data; this.left = null..

알고리즘/백준 2024.07.29

백준-2178번/섬의 개수(java)

문제 이해 N x M 크기의 그래프가 주어지고 N,M좌표까지의 최단 경로의 칸 이동 수를 구하면 되는 문제이다. 문제를 풀기 위해 BFS(너비 우선 탐색)을 사용하였다. 문제를 풀때 배열에서의 BFS는 처음 구현해보아서 매우 힘들었다..  문제 풀이 변수static int N, M;static int[][] arr;static int[] dx = {-1, 1, 0, 0};static int[] dy = {0, 0, -1, 1};static boolean[][] visit;dx, dy ==> 상하 좌우 이동을 위해 존재visit ==> 방문 여부  public static void BFS(int x, int y) { Queue queue = new LinkedList(); queue.add(ne..

알고리즘/백준 2024.07.25

백준-4963번/섬의 개수(java)

문제 이해 이 문제는 2667번 단지번호붙히기 문제와 매우 유사한 문제라는 생각을 했다.https://www.acmicpc.net/problem/2667 하지만 차이점도 존재했는데, 단지번호 붙히기 문제는 위아래,좌우 로만 이동이 가능했지만 이번 문제는 대각선 이동도 고려해줘야 했다.  문제 풀이 대각선 이동을 위해 정적 변수로 배열 dx, dy를 선언해주었다.static int[] dx={-1,0,1};static int[] dy={-1,0,1};  그리고 지도를 돌면서 dfs(깊이우선탐색)을 수행해줌으로써 연결성분을 구할 수 있다.for(int i=0; i   public static void dfs(int x, int y){ Map[x][y]=0; for(int i=0; i=0 && nx..

알고리즘/백준 2024.07.24