Algorithm/백준(BOJ)

    [백준 11724] 연결 요소의 개수

    [백준 11724] 연결 요소의 개수 문제 출처 : https://www.acmicpc.net/problem/11724 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader; public class Problem11724 { static int[][] map; static boolean[] visited; static int n; // 정점 개수 static int m; // 간선 개수 static int coun..

    [백준 2178] 미로 탐색

    [백준 2178] 미로 탐색 문제 출처 : https://www.acmicpc.net/problem/2178 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.LinkedList;import java.util.Queue; class xy { // 좌표 x,y를 저장할 클래스 생성 int x; int y; xy(int x, int y){ this.x = x..

    [백준 1260] DFS와 BFS - 인접 행렬 이용

    [백준 1260] DFS와 BFS 문제 출처 : https://www.acmicpc.net/problem/1260 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.LinkedList;import java.util.Queue; public class Problem1260 { static int[][] map; static..

    [백준 10026] 적록색약

    [백준 10026] 적록색약 문제 출처 : https://www.acmicpc.net/problem/10026 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader; public class Problem10026 { static char map[][]; static boolean visited[][]; static int n; s..

    [백준 2468] 안전 영역

    [백준 2468] 안전 영역 문제 출처 : https://www.acmicpc.net/problem/2468 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader; public class Problem2468 { static int[][] map; // 2차원 배열 생성 static boolean[][] visited; // 방문한 영역 확인할 2차원 boolean 배열 생성..

    [백준 2667] 단지번호 붙이기

    [백준 2667] 단지번호 붙이기 문제 출처 : https://www.acmicpc.net/problem/2667 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192import java.util.ArrayList;import java.util.Collections;import java.util.LinkedList;import java.util.Queue;import java.util.Scanner; public class Problem2667 {..

    [백준 1874] 스택 수열

    [백준 1874] 스택 수열 문제 출처 : https://www.acmicpc.net/problem/1874 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Stack; public class Problem1874 { public static void main(String[] args) throws IOException { BufferedReader br = ne..

    [백준 1057] 토너먼트

    [백준 1057] 토너먼트 문제 출처 : https://www.acmicpc.net/problem/1057 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;import java.util.StringTokenizer;​public class Problem1..

    [백준 8979] 올림픽

    [백준 8979] 올림픽 문제 출처 : https://www.acmicpc.net/problem/8979 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128import java.util.Arrays;import java.util.Collections;import jav..

    [백준 10819] 차이를 최대로

    [백준 10819] 차이를 최대로 문제 출처 : https://www.acmicpc.net/problem/10819 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263import java.util.Scanner; public class Problem10819 { static int[] t = new int[27483084]; // static으로 배열 선언 static int cnt = 0; // static으로 int형 변수 선언 public static void swap(int[] arr, int a, int b){ // swap 메소드 int..

    [백준 1182] 부분집합의 합

    [백준 1182] 부분집합의 합 문제 링크 : https://www.acmicpc.net/problem/1182 1234567891011121314151617181920212223242526272829303132333435363738394041424344import java.util.Scanner; public class 백준1182 { static int cnt = 0; public static void subset(int[] set, int size, int n, int[] arr, int index, int s) { if(n == index) { int sum = 0; for (int i = 0; i

    [백준 1260] DFS와 BFS - 인접 리스트 이용

    [백준 1260] DFS와 BFS 문제 출처 : https://www.acmicpc.net/problem/1260 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.LinkedList;import java.util.Queue;import java.util.Scanner; public class Main { public stati..

    [백준 1018] 체스판 다시 칠하기

    [백준 1018] 체스판 다시 칠하기 문제 출처 : https://www.acmicpc.net/problem/1018 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455import java.util.Scanner; public class Problem1018 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int N = s.nextInt(); //행 int M = s.nextInt(); //열 int[][] c = new int[N][M]; // 체스판 String[] str = ne..

    [백준 2805] 나무 자르기

    [백준 2805] 나무 자르기문제 출처 : https://www.acmicpc.net/problem/2805 문제상근이는 나무 M미터가 필요하다. 근처에 나무를 구입할 곳이 모두 망해버렸기 때문에, 정부에 벌목 허가를 요청했다. 정부는 상근이네 집 근처의 나무 한 줄에 대한 벌목 허가를 내주었고, 상근이는 새로 구입한 목재절단기을 이용해서 나무를 구할것이다.목재절단기는 다음과 같이 동작한다. 먼저, 상근이는 절단기에 높이 H를 지정해야 한다. 높이를 지정하면 톱날이 땅으로부터 H미터 위로 올라간다. 그 다음, 한 줄에 연속해있는 나무를 모두 절단해버린다. 따라서, 높이가 H보다 큰 나무는 H 위의 부분이 잘릴 것이고, 낮은 나무는 잘리지 않을 것이다. 예를 들어, 한 줄에 연속해있는 나무의 높이가 20,..

    [백준 1931] 회의실 배정

    [백준 1931] 회의실 배정문제 출처 : https://www.acmicpc.net/problem/1931 문제한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의들에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 최대수의 회의를 찾아라. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다.입력첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 ..

    [백준 11047] 동전 0

    [백준 11047] 동전 0출처 : https://www.acmicpc.net/problem/11047문제준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.동전을 적절히 사용해서 그 가치의 합을 K로 만드려고 한다. 이 때 필요한 동전 개수의 최소값을 구하는 프로그램을 작성하시오.입력첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)출력첫째 줄에 K원을 만드는데 필요한 동전 개수의 최소값을 출력한다. 예제 입력123456789101110 42001510501005001000..

    [백준 9012] 괄호

    [백준 9012] 괄호문제 출처 : https://www.acmicpc.net/problem/9012 문제괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(concatenation)시킨 새로운 문자열 xy도 VPS 가 된다. 예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())())..

    [백준 1003] 피보나치 함수

    [백준 1003] 피보나치 함수 문제 출처 : https://www.acmicpc.net/problem/1003 피보나치를 이용해서 fibonacci(0)과 fibonacci(1)의 출력 개수 구하기 피보나치가 이루어지는 과정은 점화식으로 아래와 같이 나타낼 수 있다. 1fibonacci(n) = fibonacci(n-1) + fibonacci(n-2)cs 클래스로 만들어 zero와 one의 값을 저장시킬 수 있도록 만들었다. 0과 1일 때만 초기값을 정해주면, 2부터는 점화식을 이용해서 값을 얻어낼 수 있다. 전체 소스 코드123456789101112131415161718192021222324252627282930313233343536#include using namespace std;class xy{..

    [백준 9095] 1, 2, 3 더하기

    [백준 9095] 1, 2, 3 더하기문제 출처 : https://www.acmicpc.net/problem/9095 문제 정수 4를 1, 2, 3의 조합으로 나타내는 방법은 총 7가지가 있다. 1+1+1+11+1+21+2+12+1+12+21+33+1 정수 n이 주어졌을 때, n을 1,2,3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.출력각 테스트 케이스마다, n을 1,2,3의 합으로 나타내는 방법의 수를 출력한다. 예제 입력123434710cs 예제 출력123744274cs 문제 이해하기1, 2, 3을 이용해서 주어진 정수의 합을 구할 수 ..

    [백준 1932] 숫자 삼각형

    [백준 1932] 숫자 삼각형 문제 출처 : https://www.acmicpc.net/problem/1932 문제 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5위 그림은 크기가 5인 숫자 삼각형의 한 모습이다.맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다.삼각형의 크기는 1 이상 500 이하이다. 삼각형을 이루고 있는 각 숫자는 모두 정수이며, 범위는 0 이상 9999 이하이다. 입력첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1줄까지 숫..

    [백준 1475] 방 번호 - java로 풀기

    기존에 c++로 풀었던 방 번호 문제를 java로 풀었습니다. 입력한 수를 하나씩 분리해서 배열에 저장하기 위해 몫과 나머지를 이용했었지만, 이번에는 string으로 저장한 후 다시 하나씩 int형으로 전환시켜서 저장하는 방법을 사용했습니다. 아스키 코드 값을 가져오기 위해 꼭 '0'을 빼주는 것 기억하기 1234567String N = scan.nextLine(); // N을 string으로 저장 int number[] = new int[N.length()]; // N의 길이만큼 배열 생성 for(int i = 0; i

    [백준 1463] 1로 만들기

    [백준 1463] 1로 만들기 문제 출처 : https://www.acmicpc.net/problem/1463 문제정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. X가 3으로 나누어 떨어지면, 3으로 나눈다.X가 2로 나누어 떨어지면, 2로 나눈다.1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최소값을 출력하시오. 입력첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 자연수 N이 주어진다. 출력첫째 줄에 연산을 하는 횟수의 최소값을 출력한다. 예제 입력110cs 예제 출력13cs 10의 경우 최소 횟수는 10 -> 9 -> 3 -> 1 로 3번 만에 만들 수 있다. 문제 이해하기 처음에 주어진 숫자를, 3가지..

    [백준 1475] 방 번호

    [백준 1475] 방 번호 문제 출처 : https://www.acmicpc.net/problem/1475 문제다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다. 다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최소값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.) 입력첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다. 출력첫째 줄에 필요한 세트의 개수를 출력한다. 예제 입력 19999cs 예제 출력 12cs 문제 이해하기 자기 집의 방..

    [백준 11441] 합 구하기

    [백준 11441] 합 구하기 문제 출처 : https://www.acmicpc.net/problem/11441 문제N개의 수 A1, A2, ..., AN이 입력으로 주어진다. 총 M개의 구간 i, j가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오. 입력첫째 줄에 수의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 둘째 줄에는 A1, A2, ..., AN이 주어진다. (-1,000 ≤ Ai ≤ 1,000) 셋째 줄에는 구간의 개수 M이 주어진다. (1 ≤ M ≤ 100,000) 넷째 줄부터 M개의 줄에는 각 구간을 나타내는 i와 j가 주어진다. (1 ≤ i ≤ j ≤ N) 출력총 M개의 줄에 걸쳐 입력으로 주어진 구간의 합을 출력한다. 예제 입력 1234567851..

    [백준 2292] 벌집

    [백준 2292] 벌집 문제 출처 : https://www.acmicpc.net/problem/2292 문제 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다. 입력첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다. 출력입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다. 예제 입력 113cs 예제 출력 13..

    [백준 2438] 별찍기 - 1

    [백준 2438] 별찍기 - 1 문제 출처 - https://www.acmicpc.net/problem/2438 문제첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 입력첫째 줄에 N (1 N; if (N >= 1 && N

    [백준 2750] 수 정렬하기

    [백준 2750] 수 정렬하기 문제 출처 - https://www.acmicpc.net/problem/2750 문제N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력첫째 줄에 수의 개수 N(1 N; for(int i = 0; i > arr[i];}cs i가 N번 반복하면서, 내가 입력한 수들이 arr배열에 저장되었을 것이다. 이제 저장된 arr배열끼리 모두 비교하면서, 가장 작은 것부터 출력해야 한다. arr[0]과 나머지 배열 모두를 비교한다. 만약 arr[0]보다 작은 값이 있으면, arr[0]값과 해당 위치 배열의 값을 바꿔서 저장시킨다. 이러면 기존의 arr[0]의 값은 가장 작은 값이 있던 배열로 이동하고, 배열의 맨 처음은 현재 저장된 값 중에 가장 작은 수가 될..

    [백준 1912] 연속합

    [백준 1912] 연속합 문제 출처 - https://www.acmicpc.net/problem/1912 문제n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 숫자를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 숫자는 한 개 이상 선택해야 한다. 예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다. 입력첫째 줄에 정수 n(1≤n≤100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. 출력첫째 줄에 답을 출력한다. 예제 입력 121010 -4 3 1 5 6 ..

    [백준 1149] RGB 거리 문제

    [git] 백준 1149, RGB거리 문제 출처 - https://www.acmicpc.net/problem/1149 문제 RGB거리에 사는 사람들은 집을 빨강, 초록, 파랑중에 하나로 칠하려고 한다. 또한, 그들은 모든 이웃은 같은 색으로 칠할 수 없다는 규칙도 정했다. 집 i의 이웃은 집 i-1과 집 i+1이다. 처음 집과 마지막 집은 이웃이 아니다. 각 집을 빨강으로 칠할 때 드는 비용, 초록으로 칠할 때 드는 비용, 파랑으로 드는 비용이 주어질 때, 모든 집을 칠할 때 드는 비용의 최솟값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 집의 수 N이 주어진다. N은 1,000보다 작거나 같다. 둘째 줄부터 N개의 줄에 각 집을 빨강으로 칠할 때, 초록으로 칠할 때, 파랑으로 칠할 때 드는 비용이 ..