월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨자바(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) 알고리즘 문제풀이 입문: 코딩테스트 대비
마지막 테스트케이스에서 시간 초과가 납니다.
안녕하세요 선생님. 복습을 하면서 문제를 다시 풀어보았는데요 , 선생님 방식과 같은 방식으로 해결 했다고 생각했는데 마지막 테스트케이스에서 타임 리밋이 떠서 , 혹시 제 코드보고 문제점이 있다고 생각되시는 부분 있으면 짚어주시면 감사하겠습니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
연속부분수열 코드리뷰 부탁드립니다..
while 문만 써서 해결해보고 싶어서 아래와 같이 짜 봤는데, 어떤 경우는 정답으로, 어떤 경우는 오답으로 나옵니다..이 코드에 무슨 오류가 있는지 알고 싶은데 아무리 들여다봐도 어디가 문제인지 모르겠어서 강사님께 질문 드립니다ㅠimport java.util.Scanner; public class Main { public int solution(int n, int m, int[] arr){ int sum = 0; int cnt = 0; int p1 = 0; int p2 = 0; while(true){ if(p1 == n-1 && sum < m){ break; } else { if(sum < m){ sum += arr[p1++]; if(sum == m){ cnt++; sum -= arr[p2++]; } }else if(sum > m){ sum -= arr[p2++]; if(sum == m){ cnt++; sum -= arr[p2++]; } } } } return cnt; } public static void main(String[] args){ Main t = new Main(); Scanner in = new Scanner(System.in); int n = in.nextInt(); int m = in.nextInt(); int[] arr = new int[n]; for(int i = 0; i < n; i++){ arr[i] = in.nextInt(); } in.close(); System.out.print(t.solution(n, m, arr)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
슬라이딩 윈도우와 투 포인터 알고리즘 차이에 대해 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강사님 문제에서 슬라이딩 윈도우를 쓸지 투포인터를 쓸지에 대한 차이가 무엇인가요?? 두 알고리즘 모두 문제에 '연속된'으로되어있으면 가능하지 않나요???
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
5. K번째 큰 수(영상 후반 TreeSet 추가설명) - 강의 질문
안녕하세요.수업중 질문사항이있어서 문의드립니다.'5. K번째 큰 수' 강의 중 설명 부분에 대하여 의문점이 들었습니다.문제 설명 부분에 '만약 큰 수부터 만들어진 수가 25 25 23 23 22 20 19......이고 K값이 3이라면 K번째 큰 값은 22입니다.'라는 설명이 있는데, k번째로 큰값은 71로 수정되어야 할것같습니다.
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
결혼식 문제 Queue로 풀어봤습니다.
import java.util.*; class Marry implements Comparable<Marry>{ public int s; public int e; public Marry(int s, int e){ this.s = s; this.e = e; } @Override public int compareTo(Marry o){ if(this.s == o.s) return this.e - o.e; else return this.s - o.s; } } public class 결혼식 { public int solution(Marry[] slot, int n){ int answer = 1; PriorityQueue<Integer> Q = new PriorityQueue<>(); Q.offer(slot[0].e); for(int i = 1; i < n; i++){ while(Q.peek() <= slot[i].s) { Q.poll(); } Q.offer(slot[i].e); answer = Math.max(answer, Q.size()); } return answer; } public static void main(String[] args) { 결혼식 T = new 결혼식(); Scanner in = new Scanner(System.in); int n = in.nextInt(); // ArrayList<Marry> arr = new ArrayList<>(); Marry[] slots = new Marry[n]; for(int i = 0; i < n; i++){ int s = in.nextInt(); int e = in.nextInt(); slots[i] = new Marry(s, e); } Arrays.sort(slots); System.out.println(T.solution(slots, n)); } } 도착 시간이 현재 인덱스의 시작 시간보다 작거나 같을 때 해당하는 Q를 poll() 해주는 방식으로 처리했습니다.사실 저는 PriorityQueue가 아니라 그냥 Queue로 풀었는데, 둘이 결과가 상이합니다.PriorityQueue로 풀었을 때는 정답 값이 나오는데그냥 Queue로 풀었을 때는 틀린 값이 나옵니다.PriorityQueue는 우선순위 값을 먼저 반환한다는 차이가 있다는데,Queue를 사용해도 시작 시간 s 값이 같을 경우 e를 오름차순으로 설정해줬기 때문에 e가 작은 값부터 출력이 되어서 정답 값이 나와야 한다고 생각하는데 아니네요.. 계속 짱구를 굴려보는데 이유를 모르겠습니다...긴글이지만 강사님 도와주십쇼!+ 추가 ) Queue로는 해결이 안되었던 이유를 이제야 알 것 같습니다.. 피로연에 도착한 시간 s 값이 0일 때 나가는 시간 e가 76이라고 가정해보고, 다른 하객은 s 값이 75이고, 나가는 시간 e가 76일 때 Queue로 구현하여 FIFO 방식으로 처리하게 되면도착 시간 s 를 오름차순으로 정렬하기 때문에 0 10 1...0 76과 같이 Q에 저장될 것이고s = 76이 되었을 때s = 0 , e = 76인 값만 데이터가 삭제되고,s = 75, e = 76인 값은 데이터가 삭제되지 않는 문제가 발생하게 됩니다. 하지만 PriorityQueue로 구현하게 되면 e 값이 76인 모든 데이터를 삭제할 수 있게 되므로 이러한 문제를 해결할 수 있게 됩니다.혹시 맞나요..?
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
2-11 임시반장 정하기 문제 해결 도와주세요
import java.util.Scanner; //임시반장 정하기 public class Class11 { public static void main(String[] args) { Class11 T = new Class11(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); // n명의 학생 int[][] arr = new int[n][5]; // n명 학생의 5학년까지 for (int i = 0; i < n; i++) for (int j = 0; j < 5; j++) arr[i][j] = kb.nextInt(); System.out.println(T.solution(n, arr)); } public int solution(int n, int[][] arr) { int answer = 0; int max = 0; for (int i = 0; i < n; i++) { // i학생 인덱스 int[] x = new int[n]; // 같은 반을 했던적이 있는지 담는 배열 for (int j = 0; j < 5; j++) { // 학년 수 for (int k = 0; k < n; k++) { //k학생 인덱스 if (i != k && arr[i][j] == arr[k][j])//i번학생과 k번학생의 학년이 같은지 검사. x[k] = 1; } } int s = 0; for (int tmp : x) { s += tmp; } System.out.print(i + 1 + "학생: " + s + " /"); for(int a : x) System.out.print( a + " "); System.out.println(); if (s > max) { max = s; answer = i + 1; } } return answer; } }저는 i번째 학생을 고정해두고 k번 학생이 반복문을 돌면서 j학년을 돌면서같은 반이었으면 x배열의 인덱스에 표시하도록 했습니다.그러면 x배열에 각 학생들이 같은 반이었던 학생들이 표시가 되고, 그 수를 합해서 answer로 반환하도록 했는데요.. 정답이 안 나옵니다 ㅠ.. 왜일까요
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
봉우리 문제 정답인 것 같은데 뭐가 문제인지 잘 모르겠습니다..
import java.util.Scanner; public class Main { public static void main(String[] args) { Main t = new Main(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); int[][] arr = new int[n][n]; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { arr[i][j] = kb.nextInt(); } } System.out.println(t.solution(n, arr)); } public int solution(int n, int[][] arr) { int answer = 0; boolean isTop; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { isTop = true; int center = arr[i][j]; if (i != 0) //상 if (arr[i - 1][j] > center) isTop = false; if (i != n - 1) //하 if (arr[i + 1][j] > center) isTop = false; if (j != 0) //좌 if (arr[i][j - 1] > center) isTop = false; if (j != n - 1) //우 if (arr[i][j + 1] > center) isTop = false; if (isTop) answer++; } } return answer; } }정답은 잘 나오는 것 같은데.. 채점받으면 오답이라 나옵니다.. 무엇이 문제일까요? ㅠ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
컴파일 에러 원인
선생님의 풀이말고 다른 풀이로 풀었는데 컴파일 에러가 납니다.혹시 어떤 부분이 잘못된 지 알려주실 수 있을까요?