재귀에 대한 개념이 부족하여 검색 후 코드를 리뷰하는 식으로 정리해보았다. package sliver; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main_2630 { /* * 분할정복, 재귀 문제 * 분할정복 단계 * 1. 현재 상태의 문제를 풀 수 없으면 분할 가능한지 확인 * 2. 문제를 작게 분할하여 풀이 * 3. 풀린 문제 합치기 */ //부분 색종이는 모두 같은 색상 //같은 색상이 아니라면 색종이를 절반씩 잘라서 같은 색이 될 떄까지 static int N; //배열 크기 static i..
전체 글
프로그래밍 공부 기록package hw; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main_2563_색종이 { /* * 100 * 100 도화지 안에 검은색 색종이 붙임 * 색종이의 크기는 10 * 10 * 총 검은 영역의 넓이를 구하기 * 주어진 입력은 검은색 색종이의 왼쪽 아래 꼭지점의 좌표를 줌 */ static int N; //색종이 수 static int [][] sketch; //스케치북 public static void main(String[] args) throws NumberFormatException..
package hw; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Solution_9229 { /* * 과자 두 봉지 구매 M 그램 초과하지 않는 선에서 * 과자 두 봉지의 최대 무게 합을 구하는 문제 * 과자는 무조건 두봉지를 삼 * 그리디? -> N 봉지 중 두개를 뽑는다 순서 상관 없음 * 조합 + M 초과 안 되는 조건을 줘보자 */ static int T; //테스트케이스 static int N, M;// 과자의 개수, 가능한 최대 무게 static..
package section_8; 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 Main_미로의최단거리통로 { /* * 7*7 격자판 미로 탈출 최단경로 길이 출력 * BFS 사용하는 문제 * 출발점 0,0 도착점 6,6 (배열 인덱스 기준) * 0인 곳만 움직일 수 있음 */ static int [][] arr; //미로배열 static int [][] dis; //거리를 누적해 줄 배열 //4방탐색 stat..
package section_8; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer;import javax.security.auth.x500.X500Principal; public class Main_미로탐색 { /* * 7*7 배열에서 통로 0, 벽 1 * 0인 지점으로만 상하좌우로 움직일 수 있음 * 가능한 모든 경로의 개수를 구하는 문제 */ static int [][] arr; //미로배열 크기7로 고정 static int [] dx = {1, 0, -1, 0}; static int [] dy = {0, 1, 0, -1}; ..
배열 전체를 돌면서 최대값을 찾는 완전탐색 문제 파리채가 움직이면서 돌아다녀야 하기 때문에 for문을 잘 설정해주는 것이 중요했다 package hw; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Solution_2001 { /* * N*N 배열에서 * M*M 크기의 파리채로 * 파리를 죽이는데 * 최대한 많은 파리를 죽여야함 * 완전탐색으로 배열 전체를 돌면서 * 최대값을 갱신해주면 * 되는 문제일듯? */ static int T;// 테스트 케이스 static int N; // 배열크기 static..
평소 StringBuilder 를 잘 사용하지 않았는데 이 문제에서는 출력 시 StringBuilder를 사용해서 출력해보았다 package hw; import java.util.Scanner; public class Solution_1954 { /* * 시계방향으로 배열을 돌면서 * 1부터 숫자를 채워나가는 문제 * 4방탐색과 범위지정만 잘 해주면 * 그닥 어렵지 않은 문제일지도? */ static int N; //배열 크기 static int [][] arr; //달팽이 배열 //4방탐색은 시계방향 오른쪽 -> 아래쪽 -> 왼쪽 -> 위쪽 순서 static int [] dx = {0, 1, 0, -1}; static int [] dy = {1, 0, -1, 0}; //한 방향으로 순서대로 나아가다가 ..
큐의 개념과 poll, add 메소드만 규칙에 맞게 사용해주면 쉽게 풀 수 있는 문제였다 package hw; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main_2164_카드2 { /* * 1~N까지의 번호 붙어있는 카드 * 1번카드 부터 제일 위에 있음 * 제일 위에 있는 카드 바닥에 버리고 * 그 다음으로 위에 있는 카드를 가장 밑으로 옮긴다 */ static int N; static Queue queue; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); /..