월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바(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); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
9-3. 결혼식 질문있습니다.
import java.util.*; import java.io.*; class Main { static int N; static class Time implements Comparable<Time>{ int time; char state; Time (int time, char state) { this.time = time; this.state = state; } public int compareTo(Time t) { if(time > t.time) { return 1; }else if(time == t.time) { if(state != t.state && t.state == 'e') { return 1; } } return -1; } } public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; N = Integer.parseInt(br.readLine()); ArrayList<Time> guests = new ArrayList<>(); for(int i = 0; i < N; i++) { st = new StringTokenizer(br.readLine()); int start = Integer.parseInt(st.nextToken()); int end = Integer.parseInt(st.nextToken()); guests.add(new Time(start, 's')); guests.add(new Time(end, 'e')); } Collections.sort(guests); System.out.println(solution(guests)); } public static int solution(ArrayList<Time> guests) { int ans = 0; int cnt = 0; for(Time t : guests) { if(t.state == 's') { cnt++; ans = Math.max(ans, cnt); } else { cnt--; } } return ans; } }제가 작성한 코드는 위와 같습니다. 강의에서 나온 코드와 거의 흡사한데 채점을 하면 런타임 에러가 발생합니다. 무슨 문제일까요?감사합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
해당 코드가 테스트 케이스 2개는 통과했는데 나머지 부분에서 오류가 났습니다.
import java.util.*; import java.io.*; public class Main { static int[][] graph; static boolean[][] visited; static int N; static int[] answer; static int real; public static void solution(int y, int x) { // y : 학생, x : 학년 visited[y][y] = true; // 자신을 카운팅하지 않기 위한 방법 for (int i = 1; i <= N; i++) { //세로 비교 (반 같은지 비교) if (graph[i][x] == graph[y][x] && !visited[y][i]) { answer[y]++; visited[y][i] = true; } } int max = Integer.MIN_VALUE; // answer 배열에서 최댓값 찾기 for (int i = 0; i < answer.length; i++) { if (answer[i] > max) { max = answer[i]; real = i; } } } public static void main(String args[]) throws IOException{ // 0. 입출력 구현 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); graph = new int[N+1][6]; visited = new boolean[N+1][6]; answer = new int[N+1]; for (int i = 1; i <= N ; i++) { String[] str = br.readLine().split(" "); for (int j = 1; j <= 5; j++) { graph[i][j] = Integer.parseInt(str[j - 1]); } } for (int i = 1; i <= N; i++) { for (int j = 1; j <= 5; j++) { solution(i ,j); } } bw.write(String.valueOf(real)); bw.close(); br.close(); } }피드백 요청합니다..!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
오답 확인 부탁드립니다.
import java.time.Year; import java.util.*; class Main { public static int solution(int N, int M, int[] arr) { int answer = 0; for (int lt = 0; lt < N; lt++) { int sum = 0; int rt = lt; while (sum < M) { sum += arr[rt]; rt++; if (rt >= N) break; if (sum == M) { answer++; } } } return answer; } public static void main(String[] args){ Scanner kb = new Scanner(System.in); int N = kb.nextInt(); int M = kb.nextInt(); int[] arr = new int[N]; for (int i = 0; i < N; i++) { arr[i] = kb.nextInt(); } System.out.println(solution(N, M, arr)); } } 오답이 나와 확인해봤습니다.답이 1씩 낮아서 확인해보았는데(테스트의 N=100, M=100 지점), answer가 1씩 낮았습니다.답지와 제코드의 결과값을 비교해보았는데 너무 다른 양상이 나와 질문합니다. 답지answer: 18 lt: 50 rt: 83 sum: 100answer: 19 lt: 53 rt: 86 sum: 100answer: 20 lt: 55 rt: 88 sum: 100answer: 21 lt: 58 rt: 91 sum: 100answer: 22 lt: 60 rt: 93 sum: 100answer: 23 lt: 65 rt: 99 sum: 100 제 코드answer: 16 lt: 46 rt: 77 sum: 100answer: 17 lt: 49 rt: 83 sum: 100answer: 18 lt: 50 rt: 84 sum: 100answer: 19 lt: 53 rt: 87 sum: 100answer: 20 lt: 55 rt: 89 sum: 100answer: 21 lt: 58 rt: 92 sum: 100answer: 22 lt: 60 rt: 94 sum: 100 어디가 잘못된걸까요?
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
Integer.MIN_VALUE
max = Integer.MIN_VALUE로 초기화해주는 이유가 따로 있나요??
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
그래프 최단거리(BFS 질문)
for(int i=0; i<=n; i++){ //0번은 사용하지 않아 1로 했더니 에러가 나고 0으로 바뀌니 에러가 나지 않았다. 왜? graph.add(new ArrayList<Integer>()); } 질문. 0번은 사용하지 않아1로 했더니 에러가 나고0으로 바뀌니 에러가 나지 않았습니다. 왜 그런걸까요? 에러 종류Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 6 out of bounds for length 6
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
자바 알고리즘 문제풀이 입문, 가장 짧은 문자거리 궁금한 점이 있습니다.
강사님 답변을 보면 처음에 int pos=1000;을 설정하고서 for반복문과 if구문을 이용해서 거리를 찾는데요.int[] answer = new int[s.length()];int p =1000;for(int i = 0; i<s.length(); i++) {if(s.charAt(i)==t) {p=0;answer[i] = p; }else {p++answer[i] =p;}이렇게 돼있습니다. 그런데 else에서 pos값은 처음 선언했던 1000인데 ++를 하면 1001이 되는 것 아닌가요? 그리고 궁금한점이 또 있습니다. taechermode이런 문자가 있다고 하고 e와의 거리를 찾는다고 하면answer[0]은 2가 나와야 하는데 저 식에서는 1이 나오지 않나요?(pos가 0이라고 가정할 때) 제가 잘못생각하는건지... 오류가 있다면 알려주세요
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
2개의 배열 대신 객체를 사용하는 방법도 괜찮은 방법일가요?
public void 최대점수구하기 (int L, int score, int time, ArrayList<Score> arr) {// c = 주어진 시간 (20분), n 은 주어진 문제의 갯수 if (time > maxTime) return; if (L == quizNums) {answer+= Math.max(score ,arr.get(L).score); }else {최대점수구하기(L + 1, score + arr.get(L).score, time + arr.get(L).time, arr); 최대점수구하기(L + 1, score, time, arr); }}이렇게 2개의 배열을 넘겨주는 대신 객체를 리스트에 담아서 사용하는건 어떤가요?
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
제 풀이
안녕하세요. 선생님 강의 정말 잘 보고 있습니다. 저는 for문으로 4개의 합을 한꺼번에 계산했는데 시간복잡도는 O(n^2)로 같으니 괜찮은걸까요?그리고 알고리즘 공부가 처음이라 시간복잡도를 구글링해서 찾아봤는데.. 원래 강의에서 따로 설명하는 부분이 없는건지 아니면 진도가 좀 더 나가야 설명해주시는건지 궁금합니다~(split해서 자르지않고 바로 2차배열로 저장할 수 있네요.. 스캐너 메소드를 좀 더 공부해야겠습니다.) public class INF0209 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); sc.nextLine(); int[][] grid = new int[n][n]; for (int i = 0; i < n; i++) { String s = sc.nextLine(); String[] split = s.split(" "); for (int j = 0; j < n; j++) { grid[i][j] = Integer.parseInt(split[j]); } } INF0209 inf = new INF0209(); System.out.println(inf.solution(grid, n)); } public int solution(int[][] grid, int n) { int max = 0; for (int i = 0; i < n; i++) { int[] sums = new int[4]; for (int j = 0; j < n; j++) { sums[0] += grid[i][j]; sums[1] += grid[j][i]; sums[2] += grid[j][j]; sums[3] += grid[j][n-j-1]; } //최댓값 구하기 for (int sum : sums) { if(sum > max) { max = sum; } } } return max; } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
시간복잡도 관련 질문드립니다.
질문드립니다. 시간복잡도 O(n) 라고 하셨는데 궁금한점이 있습니다,.for(int i=0; i<n; i++) { System.out.println(n);}이와같이 n개의 데이터를 받아서 처리하는경우라고 알고있는데요 for(char x : b.toCharArray()) { bmap.put(x, bmap.getOrDefault(x, 0) +1); } ====> n int L = b.length()-1; for(int i=0; i<L; i++) { amap.put(a.charAt(i), amap.getOrDefault(a.charAt(i), 0)+1); } =======> n int lt =0; for(int rt = L; rt<a.length(); rt++) { amap.put(a.charAt(rt), amap.getOrDefault(a.charAt(rt), 0)+1); if(amap.equals(bmap)) { answer ++; } amap.put(a.charAt(lt), amap.get(a.charAt(lt))-1); if(amap.get(a.charAt(lt))==0) amap.remove(a.charAt(lt)); lt++; } rt =====> n 이와같이 3개의 변수를 선언한경우도동일하게 O(n)이 되는건가요?보기만 봐서는 O(3n)의 느낌인데시간복잡도 계산방법과 해당 n 판별법이 궁금합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
8. 팰린드롬(replaceAll 정규식이용): 기업 코딩테스트를 볼 때 정규식을 사용해야 하나요?
8. 팰린드롬(replaceAll 정규식이용) 해당 문제를 저는 정규식을 사용하지 않고, 풀었습니다.정규식을 잘 모르기도 하고, 정규식도 제대로 알려면 공부해야 할 범위도 많아도 생각합니다. 혹시 기업 코딩테스트를 볼 때 무조건 정규식을 사용해야 하는 문제가 빈번하나 궁금합니다!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
테스트 케이스 10, 20 은 맞는데 30부터오답이에요
package array; import java.util.Arrays; import java.util.Scanner; public class Peaks_10 { static int solution(int n, int[][] arr) { int cnt = 0; for(int i=1; i <= n; i++) { for(int j = 1; j <= n; j++) { int target = arr[i][j]; // target과 상 하 좌 우 중 큰 값을 찾는 삼항연산자. int up = target > arr[i-1][j] ? target : arr[i-1][j]; int down = target > arr[i+1][j] ? target : arr[i+1][j]; int left = target > arr[i][j-1] ? target : arr[i][j-1]; int right = target > arr[i][j+1] ? target : arr[i][j+1]; // 상 하 좌 우 모두 target일 경우 cnt 값 증가 if(target == up && target ==down && target == left && target == right) { cnt++; } } } return cnt; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] arr = new int[n+2][n+2]; for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { int num = sc.nextInt(); arr[i][j] = num; } } System.out.println(Peaks_10.solution(n,arr)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
송아지 찾기
while (!queue.isEmpty()) {int size = queue.size(); for (int i = 0; i < size; i++) { int current = queue.poll(); if (current == E) {return jumps; for 문 돌리는 코드에서 for(int i=0; i<queue.size; )로 직접 돌리면 size값이 달라지던데 이게 왜 그런걸까요 ?이해가 잘 안가서 질문드립니다
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
섹션7 그래프 최단거리 질문 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.섹션 7 마지막문제 그래프최단거리의 BFS함수 내부에서 dis[v]를 0으로 다시 초기화해주는 이유가 궁금합니다. 0으로 초기화해주지 않아도 배열을 선언하고 처음 초기화할때 0으로 자동 초기화가 일어나지 않나요?public static void BFS(int v){ Queue<Integer> queue = new LinkedList<>(); ch[v] = 1; dis[v] = 0; //왜?? queue.add(v); while (!queue.isEmpty()){ int currV = queue.poll(); for (Integer nextV : graph.get(currV)) { if(ch[nextV]==0){ //방문한 적이 없는지 확인 ch[nextV] = 1; queue.add(nextV); dis[nextV] = dis[currV]+1; } } } }