월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
강사님 테스트 5번만 오답으로 뜨는데 틀린점을 못 찾겠습니다
테스트 5번만 리턴값이 0으로 나와서 오답처리되는데틀린점을 못 찾겠습니다ㅠㅠimport java.util.*; public class Main { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { String s = sc.next(); String t = sc.next(); System.out.print(solution(s, t)); } static int solution(String s, String t) { int answer = 0; HashMap<Character, Integer> HM = new HashMap<>(); HashMap<Character, Integer> HM2 = new HashMap<>(); char[] arr1 = s.toCharArray(); char[] arr2 = t.toCharArray(); int lt = 0; // t에 대한 해쉬맵 먼저 생성 for(char x:arr2) { HM2.put(x, HM.getOrDefault(x, 0)+1); } for(int i=0; i<arr2.length-1; i++) { HM.put(arr1[i], HM.getOrDefault(arr1[i], 0)+1); } for(int rt=arr2.length-1; rt<arr1.length; rt++) { HM.put(arr1[rt], HM.getOrDefault(arr1[rt], 0)+1); if(HM.equals(HM2)) answer++; HM.put(arr1[lt], HM.get(arr1[lt])-1); if(HM.get(arr1[lt])==0) HM.remove(arr1[lt]); lt++; } return answer; } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
3-5 연속된 자연수의 합
문제를 직접 풀며, 강의에서 진행되었던 코드를 순서를 조금 변경하면가독성있고, 조금 더 간결한 코딩을 완성할 수 있지 않을까 하여 강사님 확인을 받고싶어 남깁니다.--강의 solution 메서드 public static int solution (int n) { int answer = 0, sum=0, lt = 0; int m = n/2+1; int[] arr = new int[m]; for(int i =0; i<m; i++) arr[i] = i+1; for(int rt = 0; rt<m; rt++) { sum+= arr[rt]; if(sum == n) answer++; while(sum>=n) { sum-=arr[lt++]; if(sum==n) answer++; } } return answer; } --학생 작성 solution 메서드 public static int mySolution (int n) { int answer = 0, sum = 0, lt = 1; for(int i =1 ; i<=n; i++) { sum+=i; while(sum>n) sum-=lt++; if(sum==n) answer++; if(i>(n/2)) break; } return answer; }sum을 먼저 체크하여 lt를 차감 후 answer에 합산하는 순서가 조금 더 간결하지 않을까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
시간초과 에러
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int headCnt = sc.nextInt(); int testCnt = sc.nextInt(); int[][] array = new int[testCnt][headCnt]; for(int i=0; i<testCnt; i++) { for(int j=0; j<headCnt; j++) { array[i][j] = sc.nextInt(); } } System.out.print(solution(headCnt, testCnt, array)); } public static int solution(int headCnt, int testCnt, int[][] arr) { int answer = 0; for(int i=1; i<=headCnt; i++) { for(int j=1; i<=headCnt; j++) { int cnt=0; for(int k=0; k<testCnt; k++) { int pi = 0, pj = 0; for(int s=0; s<headCnt; s++) { //등수 if(arr[k][s] == i) pi = s; if(arr[k][s] == j) pj = s; } if(pi < pj) cnt++; } if(cnt == testCnt) { answer++; } } } return answer; } }왜 에러가 나는지 잘 모르겠습니다
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
런타임오류가 나는데 코드 확인 부탁드리겠습니다.
import java.util.Scanner; public class Main { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { int n = sc.nextInt(); int[] arr1 = new int[n]; for(int i=0; i<n; i++) { arr1[i] = sc.nextInt(); } int m = sc.nextInt(); int[] arr2 = new int[m]; for(int i=0; i<m; i++) { arr2[i] = sc.nextInt(); } for(int x : solution(arr1, arr2, n,m)) System.out.print(x + " "); } static int[] solution(int[] arr1, int[] arr2, int n, int m) { int[] answer = new int[n+m]; int a=0,b=0,c=0; while(c<n+m) { if(a<n && b<m && arr1[a]<=arr2[b]) { answer[c] = arr1[a]; a++; c++; } else if(a<n && b<m && arr1[a]>arr2[b]){ answer[c] = arr2[b]; b++; c++; } else if(a>=n || b>=m) { if(n>=m) { answer[c] = arr1[a]; a++; c++; } else { answer[c] = arr2[b]; b++; c++; } } } return answer; } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
어떤 자료구조를 사용해야하는지
아래 제 코드는 O(n*m)으로 더 느리며 필수과목을 중복 수강경우 오답이 되는 풀이라고 판단됩니다.이렇게 이런 중복이 가능하며 순서가 유지되어야 할때 queue 자료구조를 사용하면 코드가 간결해지고 적절하게 사용할 수 있다는 것을 알 수 있었는데, 이렇게 문제를 계속 풀어보면 나중에는 언제 어떤 자료구조를 적절히 사용할 수 있는지 감이 올까요? String solution(String need, String plan) { // C B B A면 yes 반환해야함. String s = ""; for (char x : plan.toCharArray()) { for (char y : need.toCharArray()) { if (x == y) s += x; } } if (need.equals(s)) return "YES"; else return "NO"; }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
Integer.MIN_VALUE
Integer.MIN_VALUE, Integer.MAX_VALUE찾아봤을때 정수의 최대, 최소값을 출력한다고 되어있는데 여기서 이것 때문에 에러가 왜 나는건지 이해를 잘 못했습니다
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
시간복잡도는..
강의에서 알려준 코드의 시간복잡도는O(nlogn) 일까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
정렬 후 더하면 왜 오답이 나오는지 궁금합니다!
안녕하세요, 강의 잘 듣고있습니다.다름이 아니라 저는 먼저 배열을 정렬 한 다음, 큰수 -> 작은수 순서대로 더하면 합한 값도 큰 순서대로 될것이라 생각하여 다름과 같이 코드를 작성하였습니다.중복된 sum 값은 코드에서 볼 수 있듯, 이전 sum값과 같으면 제거를 해 주었고요.아래 제 코드가 어떤 면에서 잘못되었는지 궁금합니다!감사합니다.int solution(int n, int k, Integer[] arr) { // arr 중에 3장을 뽑아 적힌 수를 합하려고 할때, k번째로 큰수 Arrays.sort(arr, Comparator.reverseOrder()); int count = 0; int sum = 0; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { for (int l = j + 1; l < n; l++) { if (sum == arr[i] + arr[j] + arr[l]) continue; sum = arr[i] + arr[j] + arr[l]; count++; System.out.println(count + " : " + (arr[i] + arr[j] + arr[l])); if (count == k) return (arr[i] + arr[j] + arr[l]); } } } return -1; }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
시간복잡도
fibo[] 이전 시간복잡도 2^n fibo[] 이후 시간복잡도 어떻게 되나요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
6-7 좌표 정렬 문제 질문
안녕하세요 강의 잘 듣고 있습니다. compareTo 메소드를 정의하는게 이해가 잘 안되는 부분이 있습니다.compareTo 메소드를 재정의 해주었는데 그러면 Collections.sort(리스트); 이렇게 해주면 Collections 내부에서 제가 재정의한 compareTo 메소드를 사용해 알아서 리스트를 정렬해준다고 이해하면 되는걸까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
3-2 공통원소구하기 문제 강의듣기전 풀이한 코드에대해 질문이있습니다.
강의를 듣기 전에 풀이했었던 코드입니다.문제 예시와 여러가지 입력들을 테스트 해보았을때는 문제없이 답이 나오는 것 같아 보였는데 채점사이트에서는 런타임 에러가 나옵니다. 어느 부분에서 문제가 있는지 알고싶습니다.import java.io.IOException; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.OutputStreamWriter; import java.io.BufferedWriter; import java.util.StringTokenizer; public class Main { static String solution(int[] arr1, int[] arr2) { String result = ""; StringBuilder sb = new StringBuilder(); int[] countArr = new int[1000000001]; for(int i=0; i < arr1.length; i++) { countArr[arr1[i]]++; } for(int i=0; i < arr2.length; i++) { countArr[arr2[i]]++; } for(int i=0; i < countArr.length; i++) { if(countArr[i] == 2) { sb.append(i).append(" "); } } sb.deleteCharAt(sb.length() - 1); result = sb.toString(); return result; } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st; int input = Integer.parseInt(br.readLine()); int[] array1 = new int[input]; st = new StringTokenizer(br.readLine(), " "); for(int i=0; i < array1.length; i++) { array1[i] = Integer.parseInt(st.nextToken()); } input = Integer.parseInt(br.readLine()); int[] array2 = new int[input]; st = new StringTokenizer(br.readLine(), " "); for(int i=0; i < array2.length; i++) { array2[i] = Integer.parseInt(st.nextToken()); } bw.write(solution(array1, array2)); bw.close(); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
dy dx 배열에 관련하여
안녕하십니까 코딩테스트 준비를 위해서 강의 수강중인 학생입니다.이 봉우리 문제에서 저같은 경우, 가장자리의 ArrayIndexOutOfBoundsException를 해결할 방법을 찾지 못해 일일히 이중for문을 돌면서 가로세로n+2의 배열을 만들어 문제 그림에 나와있는 것 같이 배열을 세팅하여 문제를 접근하고, 해결했습니다.문제를 풀고 난 후 강의를 들어 해답을 확인하였는데, dy dx 배열을 생성하는 점이 신선했습니다.이러한 dy dx 배열을 생성하는 것 같은 접근 방식은 어떻게 하면 배울수 있는 건가요? 통상적으로 좌표에 대해서 접근할때 dy dx 배열을 사용하는건지 궁금합니다. 감사합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
질문 드립니다!
강사님 안녕하세요.위에 그림처럼 인덱스가 주어지고 해당 인덱스 주변으로 값을 채울 수 있는 문제를 접한 적이 있어 다시 찾아보려 하였지만 제 능력으로 찾을 수 없어 이렇게 문의 드리게 되었습니다!혹시 위와 같은 문제의 유형이나 문제 링크를 공유 주실수 있으실까요?ㅠㅠㅠ감사합니다!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
같을때도 빼는 이유
안녕하세요~ 태원님강의 7분42초 쯤에 같아도 빼는 이유가 이해가 안됩니다...public int solution(int num, int sumResult, int[] arr) { int answer = 0; int sum = 0; int lt = 0; for(int rt = 0; rt < num; rt++) { sum += arr[rt]; if(sum == sumResult) { answer++; } //같아도 빼야함 while (sum >= num) { sum -= arr[lt++]; if(sum == num) answer++; } } return answer; }while에 해당하는 내용 입니다.감사합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
풀이 질문
public int getNumber(int num, int sumResult, int[] arr) { int answer = 0; int sum = 0; int pi = 0; int i = 0; while(pi < num) { sum += arr[pi]; if(sum > sumResult) { pi = i++; sum = 0; } else if (sum == sumResult) { answer++; } pi++; } return answer; } 채점은 정답으로 나왔는데,,혹시 다른 예외상황이 있을까요...?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
강사님 안녕하세요! 입출력부분에서 질문이있습니다.
풀이방법은 유사하나, 저는 정답을 answer += map.size() + " ";로 하여 진행했는데 정답은 올바르게 나오나 시간초과가 나오더군요. 그래서 강사님께서 하신대로 리스트를 만들어 size넣고 반환하니까 시간초과가 안뜨는데 리스트에 넣어 출력하는것이 더 효율적인 이유가 궁금합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
안녕하세요. 문제풀이 사이트에 문제가 없어 문의드립니다.
안녕하세요. 문제풀이 사이트에 Recursive, Tree, Graph(DFS, BFS 기초) 관련 문제가 왜 없을까요?ㅜㅜ 8번 송아지찾기 문제만있고, 앞부분의 1번부터 재귀 ~문제가 없습니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
안녕하세요. 개념이해 정상적으로 했는지 확인부탁드립니다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.StringTokenizer; public class AR_13 { public static int sol(int n,int n1,int[] aa0) { int k = n; int max = Integer.MIN_VALUE; int cnt = 0; int sum = 0; boolean is_ex = true; while ( is_ex ) { if( cnt == n1 - k ) is_ex = false; for(int i = cnt; i < k + cnt;i++) { sum += aa0[i]; } max = Math.max(max,sum); sum = 0; cnt++; } return max; } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n1 = Integer.parseInt(st.nextToken()); int n = Integer.parseInt(st.nextToken()); int[] aa = new int[n1]; st = new StringTokenizer(br.readLine()); for(int i = 0; i < n1;i++) { aa[i] = Integer.parseInt(st.nextToken()); } System.out.println(sol(n,n1,aa)); } } 슬라이딩 윈도우 개념을 이용해서 문제를 좀 다르게 푼거같은데 이렇게 풀고 정답이나오면 정상적으로 이해한게 맞을까요?
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
7-3 팩토리얼 에서...
n의 범위가 100까지인데 팩토리얼로 100! 하면 long 넘어가는데요. BigInteger로 해야하지 않나요?
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
시간초과 관련
안녕하세요. 자바로 풀다가 파이썬으로도 풀어보고 싶어서 해당 문제를 동일 로직으로 작성했는데, 예시 3, 4번에서 시간초과가 발생했습니다.(자바 코테 강의지만 파이썬 관련 질문을 드려서 죄송합니다. ㅠㅠ) 해결하는 로직은 동일하니 수단만 바뀌었다고 생각했었는데 파이썬의 한계를 느껴보니 다시 자바로 돌아가야하나..하는 생각이 들었습니다. 이렇게 언어로 인해 정답 오답이 결정되는 케이스가 많을까요? (참고로 다른 설명을 보니 백트래킹 조건에 sum > c 조건에 추가 조건을 통해 시간을 줄일 수 있는 방법을 알았습니다. 다만 자바에서는 해당 조건 없이도 통과가 되니 추가 조건을 고려해야 한다는 단점을 느꼈네요 ㅠ) import sys def DFS(L, subTotal): global maximum if subTotal > c: return if L == n: maximum = max(maximum, subTotal) else: DFS(L + 1, subTotal + a[L]) DFS(L + 1, subTotal) c, n = map(int, sys.stdin.readline().split()) a = [] for _ in range(n): a.append(int(sys.stdin.readline())) maximum = 0 DFS(0, 0) print(maximum)