월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
BFS 미로의 최단거리 통로 질문입니다.
1 0 0 0 0 1 1 0 0 이라는 board가 있다고 가정하겠습니다. (1,1)은 출발점이라 1로 표시했습니다. 큐의 현재 상태는 (1,1)입니다.(맨처음) 1 1 0 1 0 1 1 0 0 (1,1)을 큐에서 꺼내고 반복문을 돌면 큐의 상태는 (1,2), (2,1)이 될 것이고, board는 위와 같을것입니다. 1 1 1 1 1 1 1 0 0 (1,2)를 큐에서 꺼내고 반복문을 돌면 큐의 상태는 (2,1), (1,3), (2,2)가 될 것이고, board는 위와 같을것입니다. (1,3)과 (2,2)가 큐에 삽입되고 board상에서는 1로 처리되니까요 그런데 이렇게 되면, 현재는 (1,1) -> (1,2).. 의 방향으로 경로를 탐색하고 있지만 나중에 (1,1) -> (2,1) .. 의 방향으로 경로를 탐색할 때 이미, board[nx][ny]를 1로 바꿔버렸기 때문에 다른 방향으로 뻗어나가는 경로에 지장을 줄 수 있지 않나요??
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
정답은 맞게 나오는데 채점은 오답이라 해서 잘못된 곳을 모르겠습니다.
package matter7; import java.util.Iterator; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next().toUpperCase(); Main main = new Main(); System.out.println(main.solution(str)); } public String solution(String str) { String answer =""; char [] s = str.toCharArray(); int len = str.length(); for(int i = 0 ; i < len/2 ; i++) { if(s[i] == s[len-i-1]) { answer = "YES"; }else { answer = "NO"; } } return answer; } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
전위 연산자
pi++는 곧 answer.add(arr1[pi]); pi++; 이렇게 표현할 수 있지 않나요? 그렇게 적용해서 아래 코드를 실행해보았는데 java.lang.outofMemoryError:java heapspace 에러가 납니다. 에러의 원인이 어디서 발생하는지 고민하다가 파악이 되지 않아서 질문드립니다. public class IfTwoPointer { public ArrayList<Integer> solution(int[] arr1, int[] arr2, int num1, int num2) { ArrayList<Integer> answer = new ArrayList<>(); int pi = 0; int pj = 0; while (pi < num1 && pj < num2) { if (arr1[pi] <= arr2[pj]) { answer.add(arr1[pi]); pi++; // pi 와 pj++ 를 따로 넣으면, out of memory 에러가 발생한다. } else answer.add(arr2[pj]); pj++; } while (pi < num1) answer.add(arr1[pi]); pi++; while (pj < num2) answer.add(arr2[pj]); pj++; return answer; } public static void main(String[] args) { // TODO Auto-generated method stub IfTwoPointer answer = new IfTwoPointer(); Scanner sc = new Scanner(System.in); int num1 = sc.nextInt(); int[] arr1 = new int[num1]; for (int i = 0; i < num1; i++) { arr1[i] = sc.nextInt(); } int num2 = sc.nextInt(); int[] arr2 = new int[num2]; for (int i = 0; i < num2; i++) { arr2[i] = sc.nextInt(); } for (int data : answer.solution(arr1, arr2, num1, num2)) { System.out.print(data + " "); } // System.out.println(answer.printResult(arr1, arr2, num1, num2, result)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
테스트케이스 추가시 오답 나오시는분들
입력을 3 5 2 1 15 로 할시 오답이 나오고 2 2 5 15 로 할시 오답이 나오는데요. 인테저의 맥스인 2147483647의 +1 이 -2147483648이나와서 그렇습니다. Arrays.fill(dy, Integer.MAX_VALUE)에서 Integer.MAX_VALUE 를 20억으로 해주세요 ㅎㅎ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
채점중에서 넘어가지 않습니다.
챕터1에 5번문제를 제출하였는데 채점중에서 넘어가지 않고있습니다. 코드가 잘못된건가요? 확인 좀 부탁드립니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
오답인 이유가 궁금합니다
switch문으로 풀었고 문제에 주어진 예시 입출력은 결과가 똑같이 나오는데 채점사이트에서 채점해보면 오답으로 나오네요.. 제가 뭘 놓친건지 모르겠습니다. import java.util.*; public class Main { public static void main(String[] args) { Main t = new Main(); Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[] arrA = new int[N]; for (int i = 0; i < N; i++) { arrA[i] = sc.nextInt(); } int[] arrB = new int[N]; for (int i = 0; i < N; i++) { arrB[i] = sc.nextInt(); } System.out.println(t.solution(N, arrA, arrB)); } public String solution(int N, int[] arrA, int[] arrB) { String answer = ""; for (int i = 0; i < N; i++) { switch (arrA[i] - arrB[i]) { case -1: case 2: { answer += "B"; break; } case 1: case -2: { answer += "A"; break; } case 0: { answer += "D"; break; } } } return answer; } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
Node root의 선언 위치
안녕하세요. 문제를 다시 풀던 중 궁금점이 생겨 질문을 남기게 되었습니다. 본 강의에서 Node root를 메인 메서드 밖에 선언하였는데 아래 코드와 같이 import java.util.*;class Node{ int data; Node lt, rt; public Node(int n){ data = n; lt = rt = null; }}public class Practice{ public void DFS(Node root){ if(root == null) return; else{ DFS(root.lt); System.out.print(root.data + " "); DFS(root.rt); } } public static void main(String[] args){ Practice t = new Practice(); Node root = new Node(1); root.lt = new Node(2); root.rt = new Node(3); root.lt.lt = new Node(4); root.lt.rt = new Node(5); root.rt.lt = new Node(6); root.rt.rt = new Node(7); t.DFS(root); }} Node root를 메인메소드 안에서 선언하여도 정상적으로 작동하는 것 처럼 보였습니다. 1. 제가 올린 코드처럼 Node root를 메인메서드 안에 선언하는 것이 문제가 되는 부분이 있을까요? 2. 본 강의에서 처럼 Node root를 메인메서드 밖에다 선언하는 특별한 이유가 있나요? 3. 메인메서드 안에 선언하는 것과 밖에 선언하는 것에 차이점이 있나요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
boolean flag의 유무
안녕하세요. 문제를 다시 풀던 와중에 flag 없이 아래와 같이 작성해도 정답이 인정되었습니다. 혹시 변수 flag가 중요한 역할을 하는 것이 있나요? 아니면 없이 아래 코드처럼 작성해도 될까요? import java.util.Scanner;public class Practice { static String answer = "NO"; static int n, total = 0; public String DFS(int lv, int sum, int[] arr){ if(lv == n){ if(total - sum == sum){ return answer = "YES"; } } else{ BFS(lv + 1, sum+ arr[lv], arr); BFS(lv + 1, sum, arr); / } return "NO"; } public static void main(String[] args) { Practice t = new Practice(); Scanner kb = new Scanner(System.in); n = kb.nextInt(); int[] arr = new int[n]; for(int i =0; i < n; i++){ arr[i] = kb.nextInt(); total += arr[i]; } t.DFS(0, 0, arr); System.out.println(answer); }}
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
봉우리 문제 문의드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 public static void main(String[] args) { Scanner kb = new Scanner(System.in); int n=kb.nextInt(); int[][] arr=new int[n][n]; for(int i=0; i<n; i++){ for(int j=0; j<n; j++){ arr[i][j]=kb.nextInt(); } } System.out.print(solution(n, arr));}public static int solution(int n, int[][] arr) { int answer = 0; for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { int cur = arr[i][j]; if(j-1 >= 0 && cur < arr[i][j-1]) continue; if(i+1 < n && cur < arr[i+1][j]) continue; if(j+1 < n && cur < arr[i][j+1]) continue; if(i-1 >= 0 && cur < arr[i-1][j]) continue; answer++; arr[i][j] = 10; } } return answer; }문의하기를 이용해주세요. 봉우리를 잘 탐색한것 같은데 5문제중 2문제만 정답으로 표시되요. 제가 빼먹은 조건이 있을까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
왜 오답인지 궁금합니다
안녕하세요. 저는 0번지부터 시작해서 푼 다음에 마지막에 +1로 정답을 넣었고, Set을 사용해서 중복친구를 제거했습니다. 예시와 아래 테스트케이스는 맞게 나오는데, 채점하면 오답이라고 나옵니다. 제가 뭘 놓쳤는지 궁금합니다! 5 1 1 1 1 1 1 1 1 1 1 1 3 4 5 5 3 3 3 3 3 4 4 4 4 4 public static int solution(int n, int[][] arr) { Set<Integer> sameClass = new HashSet<>(); int max = 0; int answer = 0; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ for(int k = 0; k < 5; k++){ if(i != j && arr[i][k] == arr[j][k]){ sameClass.add(j); } } } if(max < sameClass.size()){ max = sameClass.size(); answer = i+1; } sameClass.clear(); } return answer; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] arr = new int[n][5]; for(int i = 0 ; i < n; i++){ for(int j = 0; j < 5; j++){ arr[i][j] = sc.nextInt(); } } int answer = solution(n, arr); System.out.println(answer); }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
다른 풀이 질문입니다.
안녕하세요. 제가 푼 방법은 import java.util.*; public class Main12 { public static void main(String[] args) { Main12 t = new Main12(); Scanner sc = new Scanner(System.in); int input = sc.nextInt(); String str = sc.nextLine(); System.out.println(t.solution(input, str)); } public String solution(int input, String str) { String answer = ""; String[] strArr = {}; char c1 = '#'; char c2 = '*'; for (int j = 0; j < input; j++) { strArr[j] = str.substring(0, 7); str = str.substring(7); } //????? char[] s = str.toCharArray(); for (int i = 0; i < s.length; i++) { if (s[i] == c1) { s[i] = '1'; } else if (s[i] == c2) { s[i] = '0'; } } String str2 = String.valueOf(s); int n = Integer.parseInt(str2, 2); if (n >= 65 && n <= 90) { char c3 = (char)(n); answer += c3; } return answer; } } 이런식으로 풀었습니다. 주석????처리된 부분을 빼고 그냥 #****## 넣었을때는 정상적으로 C가 출력되는데 주석으로 ????된 부분인 입력값을 7글자 단위로 끊는 코드 작성을 어떤식으로 해야할지 모르겠습니다. 지금 제가 올린 방법으로 하니 컴파일 에러가 발생하네요..
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
재귀함수 return에 관련하여
안녕하세요. 강의 정말 잘 듣고 있습니다. 문제 풀이 중 D(2,400)과 D(2,500)의 두 값의 작은 값을 D(1,200)에게 return 해 준다는 것이 잘 이해가 안갑니다. 어떻게 return을 D(1,200)에 해주는지 설명해주시면 감사하겠습니다!!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
뒤집은 소수 테케 2,3,4,5 문제 런타임
안녕하세요 선생님 코딩초보 강의 잘 듣고 있습니다 뒤집은 소수 테케에 문제가 있어서 글 올립니다. 2,3,4,5번 테케만 " "이 테케 맨 뒷부분에 추가되어 있어서 reverse 후 parseint를 할 경우에 numberFormatException이 나오게 되네요.수정해주신다면 다른 수강생들 중 저와 같은 문제를 겪지 않을 것 같아서 글 올립니다 항상 감사합니다 선생님 ^^
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
ch[] 체크배열 관련해서 질문 있습니다.
안녕하세요. 문제를 다시 풀어보던 중 체크 배열이 꼭 필요할 까 싶어서 체크 배열 없이 문제를 풀어보았습니다. 결과 테스트케이스 세 개는 통과하였지만, 나머지 두개는 시간 초과로 실패하였습니다. 체크 배열을 사용하는 이유는 중복된 값이 나오면 if(nx >= 1 && nx <= 10000 && ch[nx]==0) 조건문을 통해 걸러져 연산 횟수를 줄여 시간복잡도를 줄이기 위함인가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
숫자만 추출
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); solution(str); } private static void solution(String str) { String result = ""; for(Character c : str.toCharArray()) { if(result.isBlank() && (c == '0')) continue; // 비어있는 상태에서 들어오는 문자가 0이면 생략 if(Character.isDigit(c)) { // 숫자면 result += String.valueOf(c); } } System.out.print(Integer.parseInt(result)); }}해당 코드에서 어떤 문제점이 있길래 컴파일 에러가 뜰까요?? 저는 잘되는데...
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
송아지찾기에서 찾으려는 값이 나오면 level + 1하는데
송아지찾기에서 찾으려는 값이 나오면 if(nx = e) return L + 1 ; 이부분이 이해가 잘 안됩니다 ㅠㅠ 단순히 L을 출력하게되면 x의 레벨이고 nx의 레벨은 x의 자식이므로 무조건 +1을한다 라고 이해하면될까요 ?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
부분문자열 조건이 이해가 안갑니다.
안녕하세요 강사님 질문이 있습니다. bacaAacbaabac abc 4 하고 하면 bac, acb, cba, bac 라서 4인것 같은데 라고 나오는것 같습니다. bac 는 중복되었는데 부분 문자열이라고 체크 해야하나요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
nx, ny에 대한 질문
안녕하세요. 수업을 듣다 문득 궁굼한 것이 생겨 질문 드립니다. 수업을 듣다보니 위아래로의 좌표이동은 x축 이동보다는 y축 이동이 라고 생각이 드는데 nx라고 표현하신 이유가 있을까요? arr[ny][nx] 가 의미상 맞는 표현인건지, 아니면 다른 이유가 있으신건지 궁금합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
Node 클래스의 lt, rt
안녕하세요. 강의 잘 듣고있는 학생입니다. Node 클래스 내에 lt와 rt에 관해 설명하실 때 Node라는 클래스의 객체 주소를 저장하는 변수라 했는데 이 부분이 잘 이해가 안갑니다. 클래스 자료형으로 선언하는 것이 주소를 저장하는 것과 관련이 있는 것인가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
for문 대신 while문 사용
안녕하세요. 투포인터로 문제 풀다가 궁금한 게 생겨 글 남깁니다! for문 대신 while을 사용하였고, 첫번째 if에서 걸리고 나서, 그 결과값이 두번째 if에도 걸리도록 해놨습니다. 그리고 마지막 if문은 강의에서 말씀하신 것처럼 rt가 마지막까지 있을 때 sum이 m보다 클 경우 체크하였습니다! 제 if문이 틀린건가요?.. import java.util.*;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } int cnt = 0; int sum = 0; int rt = 0; int lt = 0; while (rt < n) { sum += arr[rt++]; if (sum > m) { sum -= arr[lt++]; } if (sum == m) { cnt++; sum -= arr[lt++]; } if (rt == n-1) { while (sum >= m) { sum -= arr[lt++]; if (sum == m) { cnt++; } } } } System.out.println(cnt); }}