월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
11. 문자열 압축 알고리즘 질문 있습니다.
인강에서 4분 20초 경에 IndexOutOfBoundsException이 발생하기 때문에 다음 코드의 solution 메소드에서 인자로 받는 s 뒤에 " "(공백문자)를 추가해주어야 한다고 말씀하셨는데,s = s + " ";" "(공백문자)를 추가하는 이유가 IndexOutOfBoundsException 발생이 아니라 마지막 문자 개수를 제대로 카운트하기 위함이 아닌지 질문드립니다. 아니면 IndexOutOfBoundsException가 발생할 수도 있나요? 그 이유는 무엇이고, 해당 테스트케이스는 어떤 것인가요? import java.io.*; import java.util.*; public class Main { public String solution(String s) { String answer = ""; s = s + " "; int count = 1; for (int i = 0; i < s.length() - 1; i++) { if (s.charAt(i) == s.charAt(i + 1)) { count++; } else { answer += s.charAt(i); if (count > 1) { answer += String.valueOf(count); } count = 1; } } return answer; } public static void main(String[] args) throws IOException { Main main = new Main(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); System.out.println(main.solution(str)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
최대매출 한번 봐주세요
package TwoPointers_SlidingWindow; import java.util.Scanner; public class _03_03_최대매출 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(), m = sc.nextInt(); int[] costs = new int[n]; for (int i = 0; i < n; i++) { costs[i] = sc.nextInt(); } int maxC = 0; int sum = 0; for (int i = 0; i < n; i++) { if (i < m) { sum += costs[i]; continue; } else { sum -= costs[i-m]; sum += costs[i]; } maxC = Math.max(maxC, sum); } System.out.println(maxC); } }안녕하세요 강의를 듣기 전에 미리 풀었는데요for문이 처음 시작될 때 윈도우의 길이만큼 채우고 시작하려고 if문을 써서 윈도우 값을 채워넣었습니다.윈도우 값이 덜 채워졌을 때는 continue를 써서 최대 비교를 하지 않으려고 했는데요윈도우의 길이를 충족할 때만 최대 비교가 되게하려고 짠 로직인데 오답이 납니다.그런데 continue를 빼면 정답이 되고요.어떤 부분에서 오류가 뜨는 건지 궁급합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
미로 최단거리(BFS) 코드리뷰좀 부탁드립니다.
package DFS_BFS; import java.util.Scanner; public class _08_11 { static int[][] board; static int[] dx = {-1, 0, 1, 0}; static int[] dy = {0, -1, 0, 1}; // 좌, 상, 우, 하 static int answer = Integer.MAX_VALUE; public void BFS(int L, int x, int y) { if (L >= answer) return; if (x == 7 && y == 7) { answer = Math.min(answer, L); } else { for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; // 좌상우하 if (nx >= 1 && nx <= 7 && ny >= 1 && ny <= 7 && board[nx][ny] == 0){ board[nx][ny] = 1; BFS(L + 1, nx, ny); board[nx][ny] = 0; } } } } public static void main(String[] args) { _08_11 T = new _08_11(); Scanner sc = new Scanner(System.in); board = new int[8][8]; for (int i = 1; i <= 7; i++) { for (int j = 1; j <= 7; j++) { board[i][j] = sc.nextInt(); } } board[1][1] = 1; T.BFS(0,1,1); if (answer == Integer.MAX_VALUE) System.out.println(-1); else System.out.println(answer); } } 해설하신 Queue 를 이용하지 않고 풀었는데 해설과 비교하였을때 괜찮은 코드인가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
Arrays.fill에 Integer.MAX_VALUE로 하면 안되는 거 아닌가용 ..? (10-5 동전 교환 문제)
3 2 3 4 15 라고 했을 때 답이 4가 나와야 되는데Integer.MAX_VALUE로 했을 때는 -2147483645가 나오더라구여 .. 문제랑 채점 사이트에 있는 예제 6개에서 모두 동전 종류에 1이 있어서 오류가 안 뜬 거 같은데동전 종류에 1이 없을 경우 위 예시와 같이 문제가 생길수도 있는거 아닌가용 ..? Integer.MAX_VALUE가 아니라 M 같은 수로 채워야되는 게 아닌가 궁금합니닷
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
질문 있습니다!
03-03번의 '최대 매출' 문제에서 슬라이딩 윈도우를 사용하실 때, 총 7개 중에서 4개씩 연속해서 옆으로 이동하실 때는, 처음 for문에서 4개의 연속된 값을 넣으셨습니다.ex) 1,2,3,4,5,6,7 이라면 첫 for문에서는 1,2,3,4 하지만 이번 문제에서는 7개 중에서 4개씩 연속해서 옆으로 이동하실 때는 첫 for문에서는 3개만 일단 넣고 시작하셨는데요.ex) 1,2,3,4,5,6,7 이라면 첫 for문에서는 1,2,3 이렇게 처음 for문에서의 연속된 값의 개수가 다른 점이 문제마다 의도가 다 다르기 때문에 다른 것이 맞나요? 문제마다 유연한 사고를 하기 위한 조언을 구하고 싶습니다 ㅠ
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
임시반장문제 오답케이스를 모르겠습니다.
import java.util.*; public class Main { public static void main(String[] args) { Scanner kb = new Scanner(System.in); int N = kb.nextInt(); int [][] input = new int[N][5]; for (int i = 0; i < N; i++) { for (int j = 0; j < 5; j++) { input[i][j] = kb.nextInt(); } } int answer = solution(N, input); System.out.println(answer); kb.close(); } private static int solution(int N, int[][] grid) { int answer = -1; int max = -1; for (int stdnt = 0; stdnt < N; stdnt++) { int count = 0; for (int i = 0; i < 5; i++) { int classNum = grid[stdnt][i]; for (int j = 0; j < N; j++) { if ( grid[j][i] == classNum ) { count++; } } } if ( count > max) { max = count; answer = stdnt; } } return answer+1; } }테스트케이스 많이 넣어봤는데, 오답케이스를 못찾겠습니다.여러명일때 작은 번호 출력하는것도, 하고 여러가지 넣어봤는데 잘 안되네요 ㅠ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
시간과 점수 변수를 넘길 때 선언과 동시에 더한 값을 넘기게 되면 어떻게 되나요 ??
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. static void DFS(int level, int time, int score, Exam[] arr) {if(time > m) return; if(level == n) {if(time <= m) {answer = Math.max(answer, score);}}else {DFS(level+1, time+=arr[level].time, score+=arr[level].point, arr);DFS(level+1, time, score, arr);}} else 부분에 time+= arr[level].time 처럼 선언과 동시에 더한 값을 메소드에 넘기게 되면 time 값이 가장 마지막으로 선언 된 time 값으로 고정이 되어 이전 값으로 안 돌아오게 되나요 ?
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
어떤 부분이 오답인지 궁금합니다
import java.io.*; public class Main { public int solution(int n) { int answer = 0, sum = 0, lt = 0; for (int rt = 0; rt <= n/2+1; rt++) { sum += rt; if (sum == n) answer++; while (sum >= n) { sum -= lt++; if (sum == n) answer++; } } return answer; } public static void main(String[] args) throws IOException { Main main = new Main(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); System.out.print(main.solution(n)); } } 따로, n/2+1 크기만큼의 배열을 생성해주지 않는 풀이인데, 어느 부분이 잘못되서 오답처리가 되는 것인지 잘 모르겠습니다.
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
어디가 잘못된 것인지 모르겠습니다.
import java.io.*; import java.util.*; public class Main { private int solution(int n, int[][] arr) { int[] cntArr = new int[n]; int answer = 0, max = 0; for (int i = 0; i < n; i++) { int cnt = 0; for (int j = 0; j < 5; j++) { boolean flag = false; int cur = arr[i][j]; for (int k = 0; k < n; k++) { if (i == k) continue; int compare = arr[k][j]; if (cur == compare) { flag = true; break; } } if (flag) cnt++; } cntArr[i] = cnt; max = Math.max(max, cntArr[i]); } for (int i = 0; i < n; i++) { if (cntArr[i] == max) { answer = i+1; break; } } System.out.println(Arrays.toString(cntArr)); return answer; } public static void main(String[] args) throws IOException { Main main = new Main(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); int[][] arr = new int[n][5]; StringTokenizer st; for (int i = 0; i < n; i++) { st = new StringTokenizer(br.readLine()); for (int j = 0; j < 5; j++) { arr[i][j] = Integer.parseInt(st.nextToken()); } } System.out.print(main.solution(n, arr)); } } 첫 번째 순회문(i)은 학생 번호를,두 번째 순회문(j)은 학년 번호를,세 번째 순회문(k)은 학생 번호를 순회하기 위한 for문입니다. 모든 학생을 일일이 순회하는데, 해당 학생이 위치한 학년의 학생들과 k 순회문으로 비교하는 로직입니다.(해당 학생이 위치한 학년을 비교하는, 열을 기준으로 비교하는) cntArr 배열에 각 학생의 같은 반인 횟수를 집어넣고, 최종적으로 그 중 가장 큰 값인 인덱스를 찾아 +1을 한 값을 반환합니다.이 풀이법이 틀린 이유가 무엇인가요..ㅜ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
for문 조건문 범위에 관련된 질문
강시님께서 풀어주신 TreeSet 변수 이름: set제가 풀었던(오답처리가 난) TreeSet 변수 이름: ex 강사님께서 풀어주신 for문의 형태입니다.제가 처음에 풀 때 for 문의 형태입니다.indexOutOfBoundsException이 발생하거라고 생각하여 위와 같이 조건문을 실행하였습니다. (indexOutOfBoundsException이 발생할것이라는 것은 잘못 생각한 부분입니다.) 처음에 계속 오답이 나서 조건문을 강사님과 같이 수정하니 정답처리가 되었습니다.하지만 제가 풀었던 for문의 조건문은 사실상 강사님께서 풀어준것과 똑같은 결과를 도출할 것이라 예상하였고, 실제로 set과 ex를 equals 메서드를 이용해보면 true를 반환합니다. 왜 for문의 조건문을 제가 푼 방식대로 설정하면 객체는 true를 반환하지만(같은 객체라고 판단된다고 생각됩니다.) 정답은 오답처리가 되는걸까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
연속분수수열 코드리뷰 부탁드립니다 ㅠ
import java.util.Scanner; public class Main { public static void main(String[] args) { //입력 Scanner scn = new Scanner(System.in); int n = scn.nextInt(); int m = scn.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = scn.nextInt(); } int count = 0; int sum = 0; int i = 0; int k = 1; // 더한 수열 인자의 갯수 while(i<n){ sum += arr[i]; if(sum<m) { i++; k++; } else if(sum>m){ while(sum>m){ sum -= arr[i-(k-1)]; // m 보다 크면 맨앞에거 창문에서 제거 k--; if(sum==m) count++; i++; k++; // 맨앞을빼줘서 count증가하고 index증가할때 그 다음이 바로 sum>m 경우면 또 k--를 빼주기때문에 여기서 k++를 해줘야한다. if(sum<m) i++; } } else if(sum==m){ count++; i++; } } System.out.println(count); } }문제 예제와 다른 커뮤니티 질문에 답변에 있던 예제5 31 1 1 1 1경우도 통과했는데 오답이 나옵니다 ㅠㅠ 저는 lt, rt 같은 위치자(?)를 사용하지 않고sum 되고 있는 배열 인덱스의 갯수를 세서sum > m 경우 맨 앞인덱스를 제외시킬때 사용하였습니다.
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
이 코드는 어떤 부분이 문제인지 궁금합니다.
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); Main main = new Main(); for (int i = 0; i < n; i++) { System.out.print(main.solution(i) + " "); } } private int solution(int i) { if (i <= 1) { return 1; } return solution(i - 1) + solution(i - 2); } }
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
런타임에러 질문입니다
import java.util.*; class Main { public String solution(String need, String plan){ String answer = "YES"; Queue<Character> q = new LinkedList<>(); for(char x: need.toCharArray()){ q.offer(x); // 필수과목을 q에 넣어줌 } for(int i = 0; i<plan.length(); i++){ if(!q.isEmpty() && q.peek() == plan.charAt(i)){ //교육과정 첫 번째 과목 == 현수의과목 q.poll(); } } if(!q.isEmpty()){ answer ="NO"; } return answer; } public static void main(String[] args){ Main T = new Main(); Scanner kb = new Scanner(System.in); String a=kb.next(); String b=kb.next(); System.out.println(T.solution(a, b)); } }안녕하세요! 항상 양질의 강의 잘 듣고 있습니다!처음에 if(!q.isEmpty() && q.peek() == plan.charAt(i)) 부분에서 if(q.peek() == plan.charAt(i)) 로 조건문을 짰는데, 런타임 에러가 나서 !q.isEmpty() 를 붙였더니 정상적으로 잘 돌아가게 되었습니다. 웹서핑을 하다보니 큐에 자료가 없을 경우 q.peek()를 할 경우 exception이 나 런타임 에러가 난다고 하는 데 맞을까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
씨름선수 문제 이중for문 통과했습니다.. 정상인건가요?
일단 먼저 풀어봤는데, 객체지향으로 풀려고 Player라는 클래스를 생성 후 몸무게와 키를 저장해 이중 for문으로 풀었는데 통과해버렸습니다.해당 코드는 150~200ms정도가 나오는데 통과하는게 정상인건지 궁금해서 여쭤봅니다. import java.util.Scanner; class Player { int height; int weight; public Player(int height, int weight) { this.height = height; this.weight = weight; } } public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); Player[] players = new Player[n]; for (int i = 0; i < n; i++) { int height = sc.nextInt(); int weight = sc.nextInt(); Player player = new Player(height, weight); players[i] = player; } System.out.println(solution(n, players)); } private static int solution(int n, Player[] players) { int answer = n; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (players[i].height < players[j].height && players[i].weight < players[j].weight) { answer--; break; } } } return answer; } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
아스키코드로 풀어보았는데 이렇게 짜도 괜찮을까요?
import java.util.*; class Main { public char solution(int n, String s){ int[] cnt = new int[n]; // 알파벳 등장 횟수 배열 char[] ch = s.toCharArray(); for (int i = 0; i < n; i++) { cnt[ch[i]-65]++; // count배열에 a,b,c,d,e 투표결과 저장 } int max = Integer.MIN_VALUE, answer =0; for(int i = 0; i<5; i++){ // count배열의 인덱스 0,1,2,3,4만 체크 if(cnt[i] > max){ answer = i; max = cnt[i]; } } return (char)(answer+65); } public static void main(String[] args){ Main T = new Main(); Scanner kb = new Scanner(System.in); int n=kb.nextInt(); String str=kb.next(); System.out.println(T.solution(n, str)); } }이렇게 짜도 괜찮을까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
이렇게 풀어보았는데 효율적이지 않을까요?
import java.util.Scanner; public class Main { private String solution(String str) { String result = ""; String[] words = str.split(" "); for (String word : words) { if (result.length() == word.length()) continue; // 가장 길이가 긴 단어가 여러개일 경우 문장속에서 가장 앞쪽에 위치한 단어를 답으로. if (result.length() < word.length()) result = word; } return result; } public static void main(String[] args) { Main main = new Main(); Scanner in = new Scanner(System.in); String str = in.nextLine(); System.out.println(main.solution(str)); }선생님 코드와 많이 다른데 효율성 측면에서 좋지 못한 코드인지 궁금합니다!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
채점 사이트 더이상 지원 안 하나요?
원래 강의 수강 화면 우측 상단에 채점 사이트 버튼이 있었는데 사라졌네요https://cote.inflearn.com/ 으로 바로 접속을 시도해도 로그인 하라고만 계속 뜹니다...버튼을 클릭해서 접속해야 로그인이 된 상태로 접속이 되는 것 같습니다.감사합니다.추가: 혼란을 야기해서 죄송합니다. 인프런 PC 환경에서 문제가 좀 있는 것 같네요. 모바일로 접속하면 채점 버튼이 잘 보이는데 PC 환경에서는 강의 자료 및 채점 버튼 모두 안 보입니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
다익스트라에서 반대로 최장 거리를 구하는 코드에 대해 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. class Node implements Comparable<Node>{ int v; int c; Node(int v, int c){ this.v=v; this.c=c; } @Override public int compareTo(Node o) { return o.c-this.c; //최장거리를 구해야하니까 기존과 반대로 }}public class Main { public static int[] dis; public static ArrayList<Node>[] graph; public static int n,m; public static void dij(int s) { PriorityQueue<Node> q = new PriorityQueue<>(); q.offer(new Node(s,0)); dis[s] = 0; while(!q.isEmpty()) { Node tmp = q.poll(); int now = tmp.v; int nowcost = tmp.c; if(nowcost<dis[now]) continue; //기존과 반대 for(Node ob : graph[now]) { if(dis[ob.v]<nowcost+ob.c) { //기존과 반대 dis[ob.v]= nowcost+ob.c; q.offer(new Node(ob.v, nowcost+ob.c)); } } } } 만약 문제에서 최단거리가 아닌 최장 거리를 구하라면 클래스의 정렬 순서와 다익스트라 메소드를 기존과 반대로 구현하면 될까요??
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
shortest_path에 대해 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. shortest path문제 풀때 다익스트라로 풀거나, 크루스칼로 풀거나 똑같은건가요??아니면 문제에서 다익스트라로 풀어야 하는지, 크루스칼로 풀어야하는지 힌트가 있나요???
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
마지막 테스트케이스에서 시간 초과가 납니다.
안녕하세요 선생님. 복습을 하면서 문제를 다시 풀어보았는데요 , 선생님 방식과 같은 방식으로 해결 했다고 생각했는데 마지막 테스트케이스에서 타임 리밋이 떠서 , 혹시 제 코드보고 문제점이 있다고 생각되시는 부분 있으면 짚어주시면 감사하겠습니다.