Dev.baelanche
문제에 나와있는 규칙을 잘 지키며 BFS를 수행해야 한다. 주의할 점은 따로 없어 코드에 주석을 달아놓았다. public class Main { static int n; static int m; static int a[][]; public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nextInt(); m = sc.nextInt(); a = new int[n][m]; int r = sc.nextInt(); int c = sc.nextInt(); int d = sc.nextInt(); for(int i=0; i
N일 마다 벌 수 있는 최대 이익을 저장하면서 진행한다. dp[i] = a[i][1]; //상담 이익 dp배열의 초기값은 상담 이익으로 했다. 예제의 예를 들면 1일 2일 3일 4일 5일 6일 7일 Ti 3 5 1 1 2 4 2 Pi 10 20 10 20 15 40 200 Pi 의 값을 모두 넣어준 셈인데 6일, 7일에 주어진 일은 완료할 수가 없다. 이에 대한 예외처리는 마지막에 해주었다. 1일부터 진행하며 그 날 주어진 상담을 완료할 수 있으면 dp 값을 올려준다. n번째날의 일을 수행하여 n+1번째날의 일을 수행하지 못하면 손해가 될 수 있으므로 dp값을 업데이트 할때는 기존의 값과 비교하여 큰 값으로 갱신해주어야 한다. if(i - j >= a[j][0]) dp[i] = max(dp[j] + a[..
n 배열을 오름차순으로 정렬하고 이분탐색으로 구현했다. 1. low, high는 각각 n배열의 최솟값, 최댓값으로 정했다. 2. mid 위치의 값과 현재 선택한 m 배열의 값을 비교하여 low, high 를 바꿔준다. public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.read..
최소 회수를 출력하라길래 BFS로 풀었다. 1. 4자리수의 소수 배열을 저장해 놓는다. 2. 매 탐색시 각 자리수를 0~9로 바꾸며 소수인지 아닌지 체크하며 소수이면 큐에 담는다. 3. 만들어진 수와 입력받은 수가 같으면 정지한다. 4자리수가 안되는 수는 모두 소수가 아니라고 저장하여 예외처리했다. 그리고 따로 방문이력을 담은 배열을 만들어 체크해 주어야 불가능한 경우를 알아낼 수 있다. public class Main { static boolean prime[] = new boolean[10000]; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamRe..
번역 누구나 풀 수 있는 난이도의 문제이다. 다음 영어문제는 난이도를 올려서 영어 + 해결력 을 모두 챙겨봐야겠다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); char c[] = sc.next().toCharArray(); int finger[] = new int[8]; for(int i=0; i
번역 업무 중 번역한거라 발번역이다(핑계다). 별다른 알고리즘 기법없이 문자열을 잘 다루면 된다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); while(n-->0) { char a[] = sc.next().toCharArray(); char b[] = sc.next().toCharArray(); reverse(a); reverse(b); int x = charToint(a); int y = charToint(b); int sum = x + y; char c[] = String.valueOf(sum).toCharArray(); for(i..
번역 정말 발번역이다. 문제가 너무 쉬워서 힌트만 보고도 풀 수 있다. 직접 번역은 처음이라 재미있었다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int sum = 0; for(int i=0; i
문제의 특징을 살펴보자. 1. 노드가 향하는 방향은 1가지이다. 2. 순열은 반드시 사이클을 이룬다. 위 특징때문에 각 노드는 반드시 한번만 방문하게 되므로 1차원 배열로도 충분히 구현할 수 있다. public class Main { static int n; static int a[]; static boolean visited[]; static int cnt = 0; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); while(t-->0) { n = sc.nextInt(); a = new int[n+1]; visited = new boolean[n+1]; for(int i=1; i