- [ Algorithm/백준 ][BOJ] 14501 : 퇴사 - java2024-08-20 09:28:48문제https://www.acmicpc.net/problem/14501문제풀이이 문제는 주어진 기간 동안 여러 상담 일정을 조정하여 얻을 수 있는 최대 수익을 계산하는 문제입니다. 각 상담은 특정 기간이 소요되며, 그 기간 동안 다른 상담을 진행할 수 없습니다. 목표는 상담 일정을 최적화하여 가능한 최대 수익을 얻는 것입니다. 동적 프로그래밍(DP)을 사용하여 각 날에 얻을 수 있는 최대 수익을 이전 날의 최대 수익과 비교하여 점진적으로 계산합니다.특정 날 i 에 상담을 수행할 수 있는 경우 상담을 진행하여 얻는 수익을 고려하여 해당 상담이 끝나는 날(i + t[i])에 최대 수익을 갱신소스코드import java.io.BufferedReader;import java.io.InputStreamReader..
- [ Algorithm/백준 ][BOJ] 1912 : 연속합 - java2024-07-16 08:48:29문제https://www.acmicpc.net/problem/1912문제풀이nowMax : 현재 위치까지의 최대 부분 배열 합을 저장overMax : 지금까지 발견된 전체 최대 부분 배열 합을 저장초기값으로 첫 번째 요소를 설정배열의 두 번째 요소부터 순회하며, 현재 요소를 시작으로 새로운 부분 배열의 합(arr[i])과 이전 부분 배열에 현재 요소를 추가한 합(nowMax + arr[i]) 중 더 큰 값을 nowMax에 저장overMax는 nowMax와 비교하여 더 큰 값을 저장하여 전체 최대 부분 배열 합을 유지소스코드import java.io.*;import java.util.StringTokenizer;public class _1912 { public static void main(Strin..
- [ Algorithm/백준 ][BOJ] 1254 : 팰린드롬 만들기 - java2024-07-04 13:44:15문제https://www.acmicpc.net/problem/1254문제풀이입력된 문자가 처음부터 팰린드롬인지 확인한다.아닐 경우 반복하여 검사하며 팰린드롬 구조로 만드는 작업을 해야 한다.앞부분 문자를 추출하여 뒤집고 뒷부분에 맞춘 후 팰린드롬인지 체크한다.팰린드롬이 될 때까지 추출하는 앞 문자 개수를 늘려간다.소스코드import java.io.*;public class _1254 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new Buffe..
- [ Algorithm/백준 ][BOJ] 3019 : 테트리스 - java2024-06-21 17:29:27문제https://www.acmicpc.net/problem/3019문제풀이7가지 모양의 블록이 주어지고 입력한 블록이 90도, 180도, 270도 회전하여 모양을 변경하는 경우를 생각한다.1,3,4 블록 : 2가지 / 2블록 : 1가지 / 5,6,7블록 : 4가지의 모양으로 변경할 수 있다.문제에서 언급된 대로 행은 고려하지 않고 블록이 떨어질 바닥면 높낮이만 생각한다.블록의 아랫면만 체크하면 되기에 String[][] blocks에 각 회전하여 닿는 부분을 "0", "1"로 표현하였다.ex) ㄴ: 000, ㄱ: 110, ㅜ: 101, ㅓ: 10블록의 모양별로 전체 열에 대해 순회를 하며 블록의 아래모양과 바닥이 같은지 비교(빈칸 발생)하며 카운트한다.소스코드import java.io.BufferedR..
- [ Algorithm/백준 ][BOJ] 28702 : FizzBuzz - java2024-06-05 14:51:08문제https://www.acmicpc.net/problem/28702문제풀이문제에서 원하는 출력값은 3개의 입력값 다음에 올 문자열이다.문제의 요구대로 3번의 문자열을 입력할수 있도록 반복문을 만든다.입력받은 문자가 숫자 정규식 "-?\\d+(\\.\\d+)?" 에 해당되는지 체크하여 숫자인 경우순번에 맞게 값을 더해 4번째의 값을 구한다. ex) 1번째인 경우 4번째까지 +3이 필요하다.i는 3부터 감소하며 반복을하고 n(4번째값)은 s(입력문자열) + i 가 된다.n(4번째값)을 구했으면 FizzBuzz 조건에 해당되는 문구를 출력하고 반복문을 종료한다.소스코드import java.io.*;public class _28702 { public static void main(String[] arg..
- [ Algorithm/백준 ][BOJ] 30802 : 웰컴 키트 - java2024-06-05 11:13:36문제https://www.acmicpc.net/problem/30802문제풀이N : 참가자 수sizeArr : 티셔츠 사이즈별 신청자의 수T : 티셔츠 묶음 단위 갯수 P : 펜의 묶음별 갯수cnt : 주문할 티셔츠 총 묶음 수티셔츠 사이즈 종류의 수만큼 반복하여 사이즈별 총 필요한 묶음수를 구한다.cnt += sizeArr[i] / T;// 티셔츠는 남아도되기에 묶음 단위로 나눴을때 나머지 발생시 한 묶음 추가한다.cnt = sizeArr[i] % T > 0 ? cnt + 1 : cnt; 펜의 묶음 수 (N / P) 와 한 자루 단위 주문할 개수 (N % P) 출력소스코드import java.io.*;import java.util.StringTokenizer;public class _30802 { ..
- [ Algorithm/백준 ][BOJ] 2659 : 십자카드 문제 - java2024-06-04 10:26:52문제https://www.acmicpc.net/problem/2659문제풀이1 이상 9 이하의 숫자 4개가 시계 방향으로 입력되므로 범위는 1111~9999가 된다.'시계수'란 숫자들의 시작점을 시계방향으로 바꿔가며 나온 수 중에 가장 작은 수를 뜻한다.시계방향이라는 규칙이 큐를 활용해도 된다고 판단하였다.ex) 1 2 2 1 -> 2 2 1 1 -> 2 1 1 2 -> 1 1 1 2와 같이 (큐의 길이 - 1) 반복하며 최소 숫자(시계수)를 구하는 메서드(findClockNum)를 생성했다.예제와 같이 2 1 1 2 가 입력된다면 시계수는 1122가 되며1111 ~ 1122까지의 숫자 중 0을 포함한 숫자와 1121(이 숫자의 시계수는 1112이다)과 같이 시계수가 아닌 수 를 제외하여 카운트를 센다...
- [ Algorithm/백준 ][BOJ] 1074 : Z - java2024-05-21 17:01:13문제https://www.acmicpc.net/problem/1074문제풀이Z-order curve를 사용하여 2차원 공간에서 특정 위치를 찾는 문제이다. Z-order curve는 2차원 좌표를 재귀적으로 분할하여 각 분할 영역에 번호를 매기는 방식으로, 각 좌표의 비트를 번갈아가며 결합하여 1차원으로 정렬한다. 문제는 N x N (2^N x 2^N) 크기의 격자에서 Z-order를 따라 (r, c) 위치를 방문하는 순서를 찾는 것이다.2^N x 2^N인 2차원 배열을 사분면으로 축소해 가며 (r, c)가 어느 작은 격자에 속하는지 재귀적으로 탐색을 한다.x 좌표 : r >= x && r = y && c 위와 같은 조건으로 x = 0, y = 0의 값으로 시작해 재귀적으로 탐색을 하면 가작 작은 범위의..