알고리즘/백준 53

백준-11729번/하노이 탑 이동 순서(java)

문제 이해 하노이 탑의 이동 횟수를 수학 공식으로 나타내면 다음과 같다. 만약 원판이 2개일때의 이동 과정원판 1 을 1---->2로 이동원판 2 를 1---->3으로 이동원판 1 을 2---->3으로 이동 만약 원판이 N개일때 이동 과정원판 N-1 을 1---->2로 이동원판 N 를 1---->3으로 이동원판 N-1 을 2---->3으로 이동  문제 해결  매개변수 h1은 출발지, h3는 목적지로 표현public static void move(int n,int h1,int h2, int h3) { if(n==1){ sb.append(h1+" "+h3+"\n"); return; } move(n-1,h1,h3,h2); //A --> B sb.append..

알고리즘/백준 2024.12.29

백준-1780번/종이의 개수(java)

문제 이해입력된 배열을 9등분 해가면서 배열의 숫자가 모두 같으면 해당 숫자의 갯수 증가, 다르면 9등분 후 똑같이 반복한다.9등분으로 나누어서 분할 정복 알고리즘을 사용 해야한다. 문제 해결 해당 섹션의 숫자가 모두 같은지를 체크하는 함수public static boolean numCheck(int row, int col, int size){ //종이가 모두 같은 수로 이루어져 있는지 체크 int num = arr[row][col]; for(int i=row; i 만약 섹션의 숫자가 모두 같으면 해당 숫자 카운트 증가다른 숫자가 포함 되어있는 경우에는 9등분 후  각 섹션에 대해 partition함수 재귀 실행public static void partition(int row, int col,..

알고리즘/백준 2024.12.29

백준-11728번/배열 합치기 (java)

문제 이해 두 배열을 크기 순서대로 합치는 문제이다. 두 배열에 대한 포인터를 두 개 선언해서 풀면 간단하게 풀 수 있다. 한 배열에 대한 포인터가 배열의 범위를 벗어나면 다른 배열에는 이전에 넣었던 값보다 더 큰 값만 남기 때문에 나머지 배열의 요소를 그대로 출력하면 된다.  문제 해결 1. 두 배열에 대한 포인터 선언int p1=0;int p2=0;  2. 포인터를 이용하여 배열의 대소를 비교하여 작은 값을 출력while(p1  3. 아직 출력하지 못한 부분이 있는 배열을 출력if(p1==arr.length){ for(int j=p2; j   import java.io.*;import java.util.Arrays;import java.util.HashSet;import java.util.Str..

알고리즘/백준 2024.10.07

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

숫자 카드 문제와 유사하지만 숫자 카드 2 문제는 숫자카드가 중복되어 있어서 카드 갯수를 다 구해야 한다는 차이점이 있다. 이 문제도 숫자 카드 문제와 똑같이 이진 탐색으로 Mid값을 구해주고 앞 뒤로 중복된 카드가 있는지 구해주면 되는 줄 알고 코드를 작성했다. import java.io.*;import java.util.Arrays;import java.util.StringTokenizer;public class Main { static int N; static int M; static int[] arr; public static void main(String[] args) throws IOException { BufferedReader br = new Buffere..

알고리즘/백준 2024.10.06

백준-1541번/잃어버린 괄호 (java)

문제수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다.이런 사실에 놀란 수빈이는 간단한 게임을 만들기로 했다. 두 문자열 S와 T가 주어졌을 때, S를 T로 바꾸는 게임이다. 문자열을 바꿀 때는 다음과 같은 두 가지 연산만 가능하다.문자열의 뒤에 A를 추가한다.문자열을 뒤집고 뒤에 B를 추가한다.주어진 조건을 이용해서 S를 T로 만들 수 있는지 없는지 알아내는 프로그램을 작성하시오. 입력첫째 줄에 S가 둘째 줄에 T가 주어진다. (1 ≤ S의 길이 ≤ 999, 2 ≤ T의 길이 ≤ 1000, S의 길이 출력S를 T로 바꿀 수 있으면 1을 없으면 0을..

알고리즘/백준 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

백준-1541번/잃어버린 괄호 (java)

문제 이해 숫자, +와 - 로 이루어진 계산식에서 괄호를 넣었을때의 최솟값을 구하는 문제이다.이 문제를 풀기 위해서는 식에서 최솟값이 되는 경우를 찾아야 한다. ex)55-50+40 최솟값이 되는 식 ==> 55-(50+40) 10+20+30+40 최솟값이 되는 식 ==> (10+20+30+40) 50+40-60+40 최솟값이 되는 식 ==> (50+40)-(60+40) 식이 최솟값이 되도록 괄호를 만드려면 "-"를 기준으로 식을 괄호로 나눠주면 된다. 문제 해결 ex) 50+40-60+40 1) 식을 -를 기준으로 나눠주기String input =scanner.nextLine();String[] sub = input.split("-"); (50+40) , (60+40) 2) 괄호안의 숫자들을 +를 기준..

알고리즘/백준 2024.10.01

백준-11399번/ATM (java)

문제 이해 N명의 사람이 ATM앞에 줄을 서서 돈을 뽑는데 각 사람마다 뽑는데 걸리는 시간이 다르다. EX) 입력이 아래와 같을때 최소로 걸리는 시간은 다음과 같이 구할 수 있다.53 1 4 3 2 1) 오름 차순으로 정렬 ==> 돈을 뽑는데 적은 시간이 걸리는 사람을 먼저 뽑게해서 마지막 사람이 기다리는 시간을 최소화1 2 3 3 4 이렇게 정렬을 하고 돈을 뽑는데 걸리는 시간을 구해주면 다음과 같다. 1+(1+2)+(1+2+3)+(1+2+3+3)+(1+2+3+3+4) = 32 문제 해결 우선 배열에 걸리는 시간들을 입력받고 오름차순으로 정렬시켜줬다.int[] arr = new int[N];for(int i=0; i  그 후 이중 반복문을 이용해서 걸리는 시간을 계산해준다.int time=0;for(i..

알고리즘/백준 2024.08.26

백준-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