월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
런타임 에러이유가 멀까요?
String answer = "NO"; Stack<Character> st = new Stack(); for(int i=0; i<str.length(); i++){ if(str.charAt(i)=='('){ st.push(str.charAt(i)); }else{ st.pop(); } } if (st.isEmpty()){ answer = "YES"; } return answer;}테스트케이스에서 런타임 에러가 발생했는데 이유가멀까요?!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
재귀 이진수 변환 출력이 강의와 다릅니다
public class Example02 { public static void main(String[] args) { int n = 11; //이진수 : 1011 recursion(n); } static void recursion(int n) { if(n/2 == 0) { return; } recursion(n/2); System.out.print(n%2); } } 안녕하세요 강사님, 위는 제가 작성한 코드 입니다. 코드 상 강사님이 작성하신 코드와 출력이 다를 이유는 없다고 생각이 드는데, 제 출력값은 항상 1011 이 아닌, 011이 나오네요... 조금 수정해서, 위 소스코드의 if 문을 if( n/2 == 0 && n%2 ==1) { System.out.print(1); return; } 으로 변경하니, 정상적인 결과가 출력 되었습니다. 혹시 이건 왜그런지 알 수 있을까요? 위 소스코드는 강의의 코드와 출력이 다르게 나올 이유가 없을것 같은데, 출력이 달라서요 강의가 알고리즘을 공부하는데 참 많은 도움이 됩니다. 감사합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
eclipse에서 실행되는데 채점은 pending나네요
import java.util.Scanner; class Main { public String solution(String str) { String answer = ""; for(int i=0; i< str.length(); i++) { if(Character.isUpperCase(str.charAt(i))){ // 대문자라면 str=str.replace(str.charAt(i),Character.toLowerCase(str.charAt(i))); }else if(Character.isLowerCase(str.charAt(i))) { // 소문자라면 str=str.replace(str.charAt(i),Character.toUpperCase(str.charAt(i))); } } answer= str; return answer; } public static void main(String[] args){ Main T = new Main(); Scanner in=new Scanner(System.in); String str = in.next(); System.out.println(T.solution(str)); } } 강의정답이 아니라 제가 푼 정답인데, 이클립스에서는 실행되는데, 왜 채점하기하면 pending이라고 뜰까요 ,,?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
혼자 노가다로 풀었는데 강의보고 반성하러 갑니다.. : )
package 배열1_2차원;import java.util.Scanner;public class 격자판최대합9 { static int solution(int n , int [][] arr ) { int answer =0; int [] aArr = new int [n]; int [] bArr = new int [n]; int aMax = 0; // 가로 int bMax = 0; // 세로 int c = 0; int d = 0; //가로합 -> aArr 배열에 추가 for (int i = 0; i < n; i ++ ) { for (int j = 0; j < n; j++) { aArr[i] += arr[i][j]; } } for (int i = 0; i < aArr.length; i++) { if(aMax < aArr[i]) { aMax = aArr[i]; } } //세로합 -> bArr 배열에 추가 for (int i = 0; i < n; i ++ ) { for (int j = 0; j < n; j++) { bArr[i] += arr[j][i]; } } for (int i = 0; i < bArr.length; i++) { if(bMax < bArr[i]) { bMax = bArr[i]; } } // 우하향 대각선 for (int i = 0; i < n; i++) { for (int j = i; j <= i; j++) { c += arr[i][j]; } } // 좌하향 대각선 for (int i = n-1; i >= 0; i--) { for (int j = i; j <= i; j++) { d += arr[i][j]; } } int [] maxArr = new int[] {aMax , bMax , c, d}; for (int i = 0; i < maxArr.length; i++) { if(answer < maxArr[i]) { answer = maxArr[i]; } } return answer; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int [][] arr = new int [n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { arr[i][j] = sc.nextInt(); } } System.out.println(solution(n,arr)); }}
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
테스트 케이스 한 개 통과하지 못하는 문제
solution 코드를 아래와 같이 작성했습니다. public static int solution(int n, int[][] board, int m, int[] moves) { int answer = 0; // stack 만들기 List<Stack<Integer>> stacks = new ArrayList<>(); for (int i = 0; i < n; i++) { Stack<Integer> tmp = new Stack<>(); for (int j = n - 1; j >= 0; j--) { if (board[j][i] == 0) break; tmp.push(board[j][i]); } stacks.add(tmp); } Stack<Integer> bucket = new Stack<>(); for (int i : moves) { if (!stacks.get(i-1).isEmpty()){ int newItem = stacks.get(i-1).pop(); if (!bucket.isEmpty() && bucket.peek() == newItem) { bucket.pop(); answer += 2; } else bucket.push(newItem); } } return answer; } board의 상단 인형에 접근하는 방법으로 저는 Stack의 List를 만들어 사용했고, 강사님은 직접 배열에 접근했다는 것이 차이점인 것 같습니다. 위 코드로 채점을 해보면 4번 test case까지는 통과하지만 마지막 5번 test case를 통과하지 못합니다. (리턴 : 22, 답 : 16) 코드의 효율성 문제를 떠나서 위 코드도 제대로 동작해야 될 것 같은데 마지막 케이스만 통과하지 못하는 이유를 도저히 못 찾겠네요ㅜㅜ 혹시 이유를 아시는 분이 계실까요..?ㅜ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
뒤집은 수를 넣을 배열을 하나 더 추가했는데 크게 상관없을까요?
강의보기전에 좀 걸려서 혼자 풀어보고 통과는했는데,배열을 추가해서 풀었는데 크게 상관없는지 궁금합니다 !!package 배열1_2차원;import java.util.ArrayList;import java.util.Scanner;public class 뒤집은소수6O { public static boolean isPrime(int num) { if (num == 1) return true; for (int i = 2; i < num; i++) { if (num % i == 0) { return true; } } return false; } static ArrayList<Integer> solution(int n, int[] arr) { ArrayList<Integer> answer = new ArrayList<>(); int[] c = new int[n]; // 배열을 뒤집어서 저장할 배열 생성 for (int i = 0; i < n; i++) { while (arr[i] > 0) { c[i] = c[i] * 10 + arr[i] % 10; arr[i] = arr[i] / 10; } } for (int i = 0; i < c.length; i++) { if (isPrime(c[i]) == false) { answer.add(c[i]); } } return answer; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } for (int x : solution(n, arr)) { System.out.print(x + " "); } }}
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
수열에 음수가 주어질 경우
수열에 음수가 주어지는 경우에는, sum이 더 작을 때 rt를 움직이고, 더 클 때 lt 를 움직이는 방법은 적절하지 않다고 생각되는데, 맞나요?? sum이 더 작다고 rt를 움직이더라도, 우측에 있는 수가 음수라면, lt를 움직이는 게 하나의 방법이 될 수도 있다고 생각합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
코드중에 잘못된 부분이있을까요?
안녕하세요. replaceAll 사용안하고 풀었는데, 예시입력 부분은 정상적으로 출력이 되는데, 제출하면 틀렸다고 나오는데, 혹시 잘못된 부분이 있을까요 ?? package 문자열;import java.util.Scanner;public class 팰린드롬8 { public static String solution(String str) { str = str.toUpperCase(); String answer = "NO"; for (int i = 0; i < str.length()/2; i++) { if('A' <= str.charAt(i) && str.charAt(i) <= 'Z') { if(str.charAt(i) == str.charAt(str.length()-1-i)) { answer = "YES"; } } else { continue; } } return answer; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); System.out.println(solution(str)); }}
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
+= , = 연산자 차이 오류
package DfsBfs;import java.util.Arrays;import java.util.Collections;import java.util.Scanner;public class 동전교환 { static int n, m; static Integer[] arr; static int answer = Integer.MAX_VALUE; public static void main(String[] args){ 동전교환 T = new 동전교환(); Scanner sc= new Scanner(System.in); n = sc.nextInt(); arr = new Integer[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } Arrays.sort(arr, Collections.reverseOrder()); m = sc.nextInt(); T.DFS(0, 0); System.out.println(answer); } public void DFS(int L, int sum){ System.out.println(L + " :::: " + sum); if(sum > m) return; if(L >= answer) return; if(sum == m) { answer = Math.min(L, answer); }else{ for (int i = 0; i < n; i++) { DFS(L+1 , sum + arr[i]); //sum += arr[i] ?????????? } } } }. 강사님 안녕하세요 강의 잘보고 있습니다. DFS재귀로 도는 시점에 "sum+= arr[i]" 로 두면 왜 오답이 나오는건가요?? " sum = sum + arr[i] " "sum + arr[i]" 같은거 아닌가요??..............
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
문제해결능력
안녕하세요. 강의 너무 잘 듣고 있습니다. 감사드립니다!!질문드리고 싶은 건.. 제가 문제를 보면 너무 생각이 나질 않아 문제해결능력이 많이 부족하구나.. 생각이 듭니다. 계속하다 보면 괜찮은 건지.. 아니면 문제해결능력을 기르기 위한 다른 방법이 있는지 여쭤보고 싶습니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
Node객체 생성시 주소 질문이 있습니다.
그림도 따라그려보고 하다가 질문이 있어서 올립니다. Node객체를 생성할때, Node(1) -> 100 Node(2) -> 200 Node(3) -> 300 .. Node(7) -> 700 이라는 값을 설정해 주지 않았는데, 주소값이라고 생각하면 될까요? 주소값은 생성되면 100단위로 생성이 되는 걸까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
if문 하나 추가해도 괜찮을지 확인 부탁드립니다!
public void DFS(int L, int sum) { if (flag) return; if (sum > f) return; //추가하면 더 좋을까요? if (L == n) {
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
런타임에러 문제..
안녕하세요~ 아래와 같이 작성한코드로 문제답변 입력시 런타임 에러가 나오고 있습니다. 어느쪽이 잘못된건지 도저히 모르겠어서 문의드립니다 ㅠㅠ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
유의미한 시간 차이
안녕하세요, 강의 덕분에 알고리즘 잘 배우고 있습니다. 강사님 답안을 참고하면서 구현을 하고 있는데요. 1. Main 클래스를 public 지정 여부 2. Queue = new LinkedList<>() 에 <> 를 붙여주는 것 여부에 따라서 20ms 씩 시간 차이가 났습니다. * (1) public class Main + Queue = new LinkedList<>(): 1961ms * (2) class Main + Queue = new LinkedList<>() 1986ms * (3) class Main + Queue = new LinkedList(): 2000MS * (3) public class Main + Queue = new LinkedList(): 2013MS 20ms 는 유의미한 시간 차이인가요? 여러 코드를 테스트 해볼 때, 어느 정도 부터가 성능에 영향이 간다고 할 수 있는 정도인지 궁금합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
강사님 메모이제이션 코드가 잘못된것 같습니다.
private int fibo(int n) { if (n == 1) return 1; else if (n == 2) return 1; else { if (mem[n] != 0) { return mem[n]; } else { mem[n] = fibo(n - 2) + fibo(n - 1); return mem[n]; } }} 위가 적정한 메모이제이션 코드가 아닐까 싶습니다. 예시로 작성한 코드는 fibo 함수 에서 배열내 저장된 값이 없을때만 연산을 해야하는데 배열내 저장여부와 관계없이 매 호출 마다 연산을 하니 결과값이 늦게 출력되는것 같습니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
while문 하나만 사용해서 문제를 풀었는데 길이 계산 식이 왜 이렇게 되는지 궁금합니다.
import java.util.Scanner; class Main { public int solution(int n, int k, int[] arr) { int answer = 0, lt = 0, rt = 0, kr = k; while (rt < n) { if (arr[rt] == 0) { if (kr > 0) { kr--; rt++; } else { if (arr[lt] == 0) { kr++; lt++; } else lt++; } } else { rt++; } if (answer < rt-lt) answer = rt-lt; } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); int k = kb.nextInt(); int[] arr = new int[n]; for (int i = 0 ; i < n; i ++) arr[i] = kb.nextInt(); System.out.println(T.solution(n, k, arr)); } } 강사님이 풀은 방식과는 동일하게 작동하는 것일텐데 rt 와 lt 길이 계산이 rt-lt+1 이 아닌 rt-lt 로 해줘야 맞는 결과가 나오네요 왜 이런 것인가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
tmp.length
ch[i] == 1인 경우에만 tmp에 추가하는 것 자체자 공집합을 제외하는거 아닌가요??! 두번째 if문의 필요성을 잘 모르겠어요ㅠㅠ
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
문제 출제의도 질문
안녕하세요 강사님 강의를 보다 궁금한 점이 생겨서 글을 남깁니다. 저는 해당 문제를 먼저 풀면서 (해쉬)라는 키워드를 놓치고 문제를 풀게 되었습니다. 그래서 방식을 char 두개의 배열을 모두 정렬시키고 배열을 순회하며 같은 인덱스의 문자열이 같은지 비교해서 하나라도 일치 하지 않다면 NO를 리턴하고, 전부가 같다면 YES를 리턴하는 함수를 만들어서 문제를 풀었습니다. 여기서 질문은 정렬이 들어가면서 시간 복잡도가 nlogn으로 늘어나긴 했지만 시간 제한 안에는 문제가 풀렸습니다. 그런데 해당 문제가 코테에 나오게 된다면 문제 출제 의도를 무조건 '해쉬'로만 봐야 할까요 ? 채점자에 따라 다르겠지만 통상적으로 어떤 시선으로 바라보게 되는지가 궁금합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
toString과 String,valueOf
public String solution(String str) { String answer; char[] s = str.toCharArray(); int lt = 0, rt = s.length - 1; while (lt < rt) { if (!Character.isAlphabetic(s[lt])) lt++; else if (!Character.isAlphabetic(s[rt])) rt--; else { char tmp = s[lt]; s[lt] = s[rt]; s[rt] = tmp; lt++; rt--; } } answer = String.valueOf(s); //answer=s.toString(); return answer; } 위의 코드에서 answer = String.valueOf(s)와 주석처리한 answer=s.toString이 어떤 차이점이 있을까요?? 두 코드 다 s를 스트링으로 바꿔서 answer에 넣어주는거라 생각했는데 주석처리한 코드로 제출하면 오답이라도 나오네요
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
그리디 알고리즘 씨름선수 조건을 만들어야하지 않을까요?
예를들어 테스트 케이스에서 183 65 180 70 180 66 이렇게 있다면 180 66은 선발이 돼야 합니다. 왜냐면 183 65보다 키 작지만 몸무게는 높고 180 70보다 몸무게는 낮지만 키는 같으니까 키와 몸무게 모두 A지원자 보다 높은(크고, 무겁다) 지원자가 존재하면 A지원자는 탈락하고, 그렇지 않으면 선발된다. 위 조건을 생각해보면 3명 모두 선발돼야 합니다. 하지만, 작성해주신 코드에는 maxW가 180 70에서 70으로 바뀌고, 그 후 180 66을 카운팅하지 않기 때문에 문제가 생깁니다. 그래서 같은 키를 가진 선수는 없다고 조건이 있어야 하거나, 밑 처럼 코드가 바뀌어야 한다고 생각합니다. ~~~java @Override public int compareTo(Body o) { if (o.h == this.h) return o.w - this.w; else return o.h - this.h; ~~~ 정렬 방식을 위 처럼 같은 키에서 무게를 내림차순 하고, 밑 처럼 같은 키일 때 최대 무게와 서로 키가 다를 때 최대 무게를 다르게 설정해야 한다고 생각합니다. ~~~java Player prev = new Player(0, 0); Player present = new Player(0, 0); for (int i = 0; i < N; i++) { if (present.k != arr[i].k) { prev.w = Math.max(prev.w, present.w); present.k = arr[i].k; present.w = arr[i].w; } if (prev.w < arr[i].w) { cnt++; } } ~~~