목록Data Structure & Algorithm/PS - JAVA (270)
Dev.baelanche
최소 회수를 출력하라길래 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
메모이제이션 + 탐색을 요구하는 문제다. 1. 경로의 개수가 21억즈음이므로 메모이제이션 없이 돌리면 시간초과가 난다. 2. 아래, 오른쪽으로 가는 경로의 개수를 합하면서 이동하기 때문에 dp 배열은 long으로 해줘야 한다. 3. 게임판 배열은 0
상, 하, 좌, 우, 위, 아래로 퍼진다는 것만 유의하며 BFS 를 하면 된다. int dh[] = {0, 0, 0, 0, -1, 1}; //위, 아래 int dn[] = {-1, 1, 0, 0, 0, 0}; //상, 하 int dm[] = {0, 0, -1, 1, 0, 0}; //좌, 우 나는 이렇게 해결했다. 처음부터 모두 익어있다면 0, 모두 익지 못한다면 -1이 출력되는 부분을 따로 예외처리 해주었다. int cnt = -1; //기본 카운트 while(!q.isEmpty()) { //로직 수행 cnt++; } for() { //토마토 배열 체크 } //딱 한번 수행되고 멈추었다면 안익은 토마토가 없다는 뜻이므로 0 출력 //토마토 배열을 체크하여 안익은 토마토가 있다면 -1 출력 //모두 익었다..
네개의 값을 다음과 같은 방법으로 구했다. 산술평균 : 입력받을 정수들을 모두 더해 n으로 나누어 반올림 중앙값 : 배열을 정렬해 가운데 배열의 값을 출력 최빈값 : 인덱스, 빈도 횟수를 담은 클래스를 만들어 정렬한 후 최빈값(여러 개 일시 두번째 값) 출력 범위 : 최대값 - 최소값 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)); int n = In..