월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
8-11 미로의 최단거리 (BFS)
import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; class Main { static int[][] miro, dis; static int[] dx = {-1, 1, 0, 0}; static int[] dy = {0, 0, -1, 1}; static int min; static boolean flag; public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); miro = new int[9][9]; dis = new int[9][9]; min = 0; flag = false; for (int i = 0; i < 9; i++) { if (i == 0 || i == 8) { for (int j = 0; j < 9; j++) { miro[i][j] = 1; } } else { miro[i][0]=1; miro[i][8]=1; } } for (int i = 1; i <= 7; i++) { for (int j = 1; j <= 7; j++) { miro[i][j] = sc.nextInt(); } } miro[1][1]=1; dis[1][1]=0; T.BFS(new int[]{1, 1}); System.out.println(min); } void BFS(int[] loca) { Queue<int[]> Q = new LinkedList<>(); int[] cl = loca; Q.offer(cl); while (!Q.isEmpty()) { if (flag) { return; } cl = Q.poll(); for (int i = 0; i < 4; i++) { int[] nl = {cl[0] + dx[i], cl[1] + dy[i]}; if (miro[cl[0] + dx[i]][cl[1] + dy[i]] == 0) { Q.offer(nl); dis[cl[0] + dx[i]][cl[1] + dy[i]] = dis[cl[0]][cl[1]]+1; miro[cl[0] + dx[i]][cl[1] + dy[i]] = 1; if (Arrays.equals(nl,new int[]{7,7})) { min = dis[cl[0] + dx[i]][cl[1] + dy[i]]; flag = true; return; } } } } } }좌표를 클래스로 정의하지 않고 배열로 매개변수를 사용해서 BFS 구현을 하였는데 오답이 나옵니다 ㅜㅜ 출력 12는 나오는데 무엇이 문제일까요??
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
런타임 에러 질문 있습니다.
배열 11. 임시반장 정하기 에서 문제를 풀고 있는데해당 코드에서 런타임 에러가 발생하는데 이유를 알 수 있을까요? import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Main t = new Main(); Scanner in = new Scanner(System.in); int n = in.nextInt(); int[][] arr = new int[n][n]; // int[] arr2 = new int[n]; for (int i = 0 ; i < n; i++){ for (int j =0; j < n; j++) arr[i][j] = in.nextInt(); } // for (int i = 0 ; i < n; i++){ // arr2[i] = in.nextInt(); // } int test = t.solution11(n,arr); System.out.print(test); } // 11번 임시반장 private int solution11(int n, int[][] arr){ int answer = 0; int MAX = 0; for (int i =0; i < 5; i ++){ int cnt = 0; for (int j=0; j < n;j++){ int temp = arr[j][i]; for (int k =0; k <n; k++){ if (k == j) continue; else if (temp == arr[k][i]){ cnt++; } } if (cnt > MAX){ MAX = cnt; answer = j; } } } return answer; } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
최대 매출 코드 풀이랑 동일한 시간복잡도가 나오나요?
package slidingwindow; import java.util.Scanner; public class MaximumSales { static int solution(int n, int k, int[] arr) { int p1 = 1; int sum = 0; int max = 0; for(int i = 0; i < k; i++) { sum += arr[i]; } // 최초 값을 max에 대입 max = sum; // 최초 p[0] + p[1] + p[2] .... 값 제외 // p[1] + p[2] ... 부터 while(p1 < n-k+1) { sum = sum - arr[p1-1] + arr[p1+k-1] ; p1++; max = max > sum ? max : sum; } return max; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); int[] arr = new int[n]; for(int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } System.out.println(MaximumSales.solution(n, k, arr)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
1번문제 틀린 이유를 모르겠습니다.
import java.util.Scanner; // Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`, // then press Enter. You can now see whitespace characters in your code. public class Main { public int solution(String data, char what) { int count = 0; data = data.toLowerCase(); for (char a : data.toCharArray()) { if (a == what) { count++; } } return count; } public static void main(String[] args) { Main T = new Main(); Scanner scanner = new Scanner(System.in); String data = scanner.nextLine(); char what = scanner.nextLine().charAt(0); System.out.println(T.solution(data, what)); } }1번 문제인데 이대로 제출하니까 틀렸다고 합니다. 원인을 모르겠어요 ㅠ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
8-1 합이 같은 부분집합
정확하게 출력이 되는것 같은데 오답이라고 나옵니다 선생님.. 제가 잘못 짠 부분이 있을까요??import java.util.Scanner; class Main { static int n,total; static int[] array; static boolean flag; public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); n = sc.nextInt(); total =0; array = new int[n]; for (int i = 0; i < n; i++) { array[i] = sc.nextInt(); total += array[i]; } flag = false; T.DFS(0, 0); if (flag) { System.out.println("YES"); } else { System.out.println("NO"); } } void DFS(int L, int sum) { if (L == n) { return; } if (sum == total / 2) { flag = true; return; } if (sum > total / 2) { return; } DFS(L + 1, sum + array[L]); DFS(L + 1, sum); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
채점 사이트 연결
우측 상단에 채점 버튼을 누르면 브라우저 새 창만 열리고 사이트가 정상적으로 안 뜨는데 어디서 채점사이트를 이용해야하나요??
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
채점 오류
import java.io.*; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main { public static int solution(int[] arr, int K) { int max = 0; Queue<Integer> zeroPoint = new LinkedList<>(); int lp = 0, length = 0; for (int rp = 0; rp < arr.length; rp++) { if (arr[rp] == 0) { zeroPoint.offer(rp); // 0이 꽉 찼을 경우 if (zeroPoint.size() > K) { length = rp - lp; max = Math.max(length, max); Integer poll = zeroPoint.poll(); lp = poll + 1; } } } 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 N = Integer.parseInt(st.nextToken()); int K = Integer.parseInt(st.nextToken()); int[] arr = new int[N]; StringTokenizer st2 = new StringTokenizer(br.readLine()); for (int i = 0; i < N; i++) { arr[i] = Integer.parseInt(st2.nextToken()); } System.out.print(solution(arr, K)); } } 6. 최대 길이 연속 부분수열파트에서 이 코드가 정답이라고 나옵니다. 테스트 케이스가 부족해서 모든 문제에서 이런 현상이 발생하는건지, 이 문제에만 오류가 있는건지 궁금합니다. 반례 테스트 케이스 : 14 21 1 0 0 1 1 0 1 1 0 0 1 1 1 기댓값 : 7출력값 : 6
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
2번만 RuntimeError가 뜨는데요
package twopointers; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class CommonElements { static ArrayList<Integer> solution(int n, int m, int[] arr, int[] arr2) { ArrayList<Integer> list = new ArrayList<>(); Arrays.sort(arr); Arrays.sort(arr2); int p1 = 0; int p2 = 0; while (p1 < n && p2 < m) { if (arr[p1] == arr2[p2]) { list.add(arr[p1]); p1++; p2++; } else if (arr[p1] < arr2[p2]) { p1++; } else { p2++; } } return list; } 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(); } int m = sc.nextInt(); int[] arr2 = new int[n]; for (int i = 0; i < m; i++) { arr2[i] = sc.nextInt(); } for (int result : CommonElements.solution(n, m, arr, arr2)) { System.out.print(result + " "); } } } 뭐가 문제일까요??
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
Array.sort 사용 구분
앞 문제에서 Collection.sort를 쓰면 문제에서 효율적이지 못하다는 댓글을 봐서 처음부터 Array.sort를 해서 정렬하는 방법을 생각을 못했는데 어떤 문제에선 사용하고 사용하지말고 구분이잘 안되는데 이럴땐 어떻게 하나요...
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
카운트 부분 질문드립니다.
if(count(arr, mid)==c) {answer=mid;lt=mid+1;} else if(count(arr, mid)<c) rt=mid-1;else lt=mid+1;카운트가 c보다 큰 값인 경우에 answer=mid를 해주지 않으면 왜 오답으로 나오는지 모르겠습니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
매출액의 종류 문제 풀이 질문 있습니다
매출액의 종류 문제 풀이 질문 있습니다.public ArrayList<Integer> solution(int n, int k, int[] arr) { ArrayList<Integer> answer = new ArrayList<>(); Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < k - 1; i++) { map.put(arr[i], map.getOrDefault(arr[i], 0) + 1); } return answer; }처음에 k-1 개만 map에 세팅해줘야 하는 이유가 뭔가요?k개까지 세팅해야 하지 않나요? 만약에 k개까지 세팅한다면 코드를 다음과 같이 할 수 있는데,이때 두번째 for문의 if문의 조건에서 왜 HM.get(arr[lt])이 1보다 큰지의 여부로 바뀌는 것인가요? public ArrayList<Integer> solution(int n, int k, int[] arr) { ArrayList<Integer> answer = new ArrayList<>(); Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < k; i++) { map.put(arr[i], map.getOrDefault(arr[i], 0) + 1); } answer.add(map.size()); int left = 0; for (int right = k; right < n; right++) { map.put(arr[right], map.getOrDefault(arr[right], 0) + 1); if (map.get(arr[left]) > 1) { map.put(arr[left], map.get(arr[left]) - 1); } else { map.remove(arr[left]); } left++; answer.add(map.size()); } return answer; }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
왜 오답처리 되는지 모르겠습니다.
package infren.section1; import java.util.Scanner; public class section1_10 { static String solution(String s, String t) { String answer = ""; int[] tmp = new int[s.length()]; int p = 1; for (int i = 0; i < tmp.length; i++) { if (String.valueOf(s.charAt(i)).equals(t)) { tmp[i] = 0; p = 1; } else { tmp[i] = p++; } } p = 1000; for (int i = tmp.length - 1; i >= 0; i--) { if (String.valueOf(s.charAt(i)).equals(t)) { tmp[i] = 0; p = 1; } else { tmp[i] = Math.min(tmp[i], p++); } } for (int i = 0; i < tmp.length; i++) { answer += tmp[i] + " "; } return answer; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] tc = sc.nextLine().split(" "); String s = tc[0]; String t = tc[1]; String answer = solution(s, t); System.out.println(answer); } }출력값은 정답과 동일하게 나오는데 제출을 하면 오답처리로 되는데 어디가 문제인지 모르겠습니다
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
선생님이 풀어주신 코드와 로직은 같은데 왜 채점은 타임에러 뜨는지 모르겠습니다.
선생님이 풀어주신 코드는 한번 더 확인하는 과정을 거쳐서 board의 수만큼 시간 복잡도가 그만큼 더 늘어나는 것 같아서 익지 않은 토마토의 개수를 세어서 그 수만큼 익으면 days를 반환하는 코드를 짰는데 왜 타임에러가 발생하는지 궁금합니다. 제가 놓치고 있는 부분이 무엇일까요?..package testSection8; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; class Point{ int x,y; Point(int x, int y){ this.x = x; this.y = y; } } public class Main{ static int n,m,days=0,total=0,cnt; static int[][] board; static int[] dx = {-1,0,1,0}; static int[] dy = {0,1,0,-1}; static Queue<Point> q = new LinkedList<>(); public int BFS(){ while (!q.isEmpty()){ days++; int size = q.size(); for(int i=0; i<size; i++){ Point point = q.poll(); for(int j=0; j<4; j++){ int nx = point.x+dx[j]; int ny = point.y+dy[j]; if(nx>=0 && nx<n && ny>=0 && ny<m && board[nx][ny] == 0){ if(++cnt == total) return days; board[nx][ny] = 1; q.offer(new Point(nx,ny)); } } } } return -1; } public static void main(String[] args) { MainT = new Main(); Scanner sc = new Scanner(System.in); m = sc.nextInt(); n = sc.nextInt(); board = new int[n][m]; for(int i=0; i<n; i++){ for (int j=0; j<m; j++){ board[i][j] = sc.nextInt(); if(board[i][j] == 1) q.offer(new Point(i,j)); else if(board[i][j] == 0) total++; } } System.out.println(T.BFS()); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
시간복잡도 질문
3중 for문으로 카드를 뽑으면 간단하다는 건 알고있었지만, 이러면 시간복잡도가 O(n^3) 이 되면서 시간초과가 나면서 안될 것 같다고 생각했습니다... 보통 n이 몇까지 가면 시간초과가 발생하나요? 이걸 제대로 몰라서 이중for문도 조심스럽습니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
멘토링 코드 중 이해가지 않는 부분이 있습니다.
이 코드에서if(arr[k][s] == i) pi = s; if(arr[k][s] == j) pj = s;이 부분이 이해가질 않습니다. 왜 i와 j 가 같아야지 pi, pj에 넣을 수 있는 건가요??
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
안녕하세요, 문제를 풀다가 마땅한 방법이 떠오르지 않는 문제가 있어 질문 드립니다.
강의에는 포함되지 않는 문제인데 마땅한 방법이 떠오르지 않는 문제가 있어 질문 드립니다.마땅히 여쭤볼 분이 안 계셔서 여기 질문 드리는데, 바쁘시면 답변하지 않으셔도 괜찮습니다.문제는 프로그래머스 - 평행 이라는 문제입니다! 제가 푼 코드는 아래와 같습니다.import java.util.List; import java.util.ArrayList; class Solution { public int solution(int[][] dots) { double slope1; double slope2; slope1 = calculateSlope(dots[0], dots[1]); slope2 = calculateSlope(dots[2], dots[3]); if(Double.compare(slope1, slope2) == 0) { return 1; } slope1 = calculateSlope(dots[0], dots[2]); slope2 = calculateSlope(dots[1], dots[3]); if(Double.compare(slope1, slope2) == 0) { return 1; } slope1 = calculateSlope(dots[0], dots[3]); slope2 = calculateSlope(dots[1], dots[2]); if(Double.compare(slope1, slope2) == 0) { return 1; } return 0; } private double calculateSlope(int[] dot1, int[] dot2) { return (double) (dot1[1] - dot2[1]) / (dot1[0] - dot2[0]); } }하지만 점이 4개일 때가 아닌, 다른 경우에도 적용이 가능한 메소드를 만들고 싶은데 잘 되지 않는 것 같습니다.여유가 되신다면 부디 부탁 드립니다. 코딩테스트 연습 - 평행 | 프로그래머스 스쿨 (programmers.co.kr)
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
DFS로 말단노드의 레벨값 구할때
이진트리 노드의 하위노드가 한개만 한개는 없을 경우 안된다고 말씀하셨는데 실제로 실습을 해보았을때도 안되더라구여 왜 안되는지 이유를 알고 싶습니다예를 들어If(root.lt==null && root.rt ==null) return L;else if(root.lt==null && root.rt != null) return DFS(L+1, root.lt);else if(root.lt !=null && root.rt == null) return DFS(L+1, root.rt);else return Math.min(DFS(L+1, root.lt), DFS(L+1, root.rt);이렇게 했을 경우 하위노드에 있는 하위노드 두개가 있는건 하위노드로 접근했을 때 값이 존재 했는데 하위노드가 한개 있을 경우 하위노드가 존재하는 노드를 dfs로 재귀했을경우 null값으로 되어서 이게 왜 이렇게 되는건지 알고 싶습니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
코드 정리한 것들 깃허브에 올려도 되나요?
강사님 안녕하세요. 강의 정말 잘 듣고 있습니다!매일 5문제씩 꾸준히 풀고 있는데,, 깃허브에 올려도 될까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
string vs StringBuilder 어느 것을 사용해야 될까요?
안녕하세요! 너무 간단한 질문이지만, 초심자라 .. 질문 드리고 싶습니다 지금까지 String을 합칠때 '+' 을 사용하여 왔습니다. 그런데 StringBuilder에 대해 공부를 좀 하고 보니 이대로 사용하면 괜찮을까? 고민을 하게 되었습니다. 물론, 문제마다 다르겠지만, 코딩테스트를 시험치러 갈때 StringBuilder를 사용하지 않았다고 해서 시간초과가 뜨거나 그렇진 않을지 궁금합니다. 지금부터라도 StringBuilder로 사용하는 것이 맞을까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
매출액의 종류 문제 질문있습니다.
해당 문제를 다음과 같이 풀었는데 RunTime Error가 발생하는 이유가 뭘까요 ?혹시 시간초과가 되는것일까요 ? import java.util.HashMap; import java.util.Scanner; public class No3 { public static void solution(int n, int m, int[] arr) { HashMap<Integer, Integer> map = new HashMap<>(); int[] answer = new int[m]; int lt = 0; for (int i = 0; i < m; i++) { map.put(arr[i], map.getOrDefault(arr[i], 0) + 1); } answer[0] = map.size(); for (int rt = m; rt < n; rt++) { map.put(arr[lt], map.getOrDefault(arr[lt], 0) - 1); map.put(arr[rt], map.getOrDefault(arr[rt], 0) + 1); if (map.get(arr[lt]) == 0) map.remove(arr[lt]); answer[++lt] = map.size(); } for (int x : answer) System.out.print(x + " "); } 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(); solution(n, m, arr); } }