월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바(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); } }
- 미해결자바(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 판별법이 궁금합니다.