월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨자바(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) 알고리즘 문제풀이 입문: 코딩테스트 대비
컴파일 에러 원인
선생님의 풀이말고 다른 풀이로 풀었는데 컴파일 에러가 납니다.혹시 어떤 부분이 잘못된 지 알려주실 수 있을까요?
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
바둑이 승차 문제 강의 코드랑 비슷한데 오류가 나는 이유가 뭘까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.public class Main { static int m, n; static int max = 0; public static void DFS(int k, int sum, int[] arr) { if(sum > m) return; if(k == n - 1) { max = Math.max(sum, max); return; } DFS(k + 1, sum + arr[k + 1], arr); DFS(k + 1, sum, arr); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); m = sc.nextInt(); n = sc.nextInt(); int[] arr = new int[n]; IntStream.range(0, n).forEach(i ->{ arr[i] = sc.nextInt(); }); DFS(0, arr[0], arr); System.out.println(max); } }강의 코드랑 다른 점은 sum이 0에서 출발하고 저는 arr[0]부터 출발했다는 것 같습니다.코드 채점에서는 대부분의 경우가 맞지만 딱 마지막 경우의 수에서 오류가 나더라고요.제 코드에서 틀린 점이 무엇일까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
정답오류가 있는것 같습니다.
안녕하세요 선생님다름이 아니라 제가 작성한 코드가 정답처리가 되었는데 이 코드는 정답이 되면 안되는 코드가 아닌가 해서 여쭤보고 싶어서 질문글 남깁니다.예를들면 첫번째 문제에서는 CBA 순서로 무조건 짜야하지만제 코드에서 str1 은 꼭 순서를 지켜야 하는 값이고str2는 C의 순서를 알 수 없는데 정답처리가 되어서 제가 작성한 코드가 제대로 정답이 맞는건지 궁금해서 질문글을 남깁니다!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
백준 17141 추가문제 입니다. 8-15번 피자문제
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 교수님교수님께서 알려주신 8-15번 풀이를 적용하여추가문제 백준 17141 연구소 2를 풀고 있습니다그런데 어떻게 풀어도 계속 메모리 초과가 나서 뭐가 문젠지 모르겠습니다...import java.util.*;class Pointo{ int y; int x; Pointo(int y, int x){ this.y=y; this.x=x; } }public class Main { static int n; static int m; static int[][] arr; static int[] pm; static int[] dx= {0,0,+1,-1}; static int[] dy= {+1,-1,0,0}; static ArrayList<Pointo> list=new ArrayList<>(); static int answer=Integer.MIN_VALUE; public static void main(String[] args) { Scanner scanner=new Scanner(System.in); n=scanner.nextInt(); m=scanner.nextInt(); arr=new int[n][n]; pm=new int[m]; for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { arr[i][j]=scanner.nextInt(); if(arr[i][j]==2) { list.add(new Pointo(i,j)); } } } dfs(0,0); if(answer!=0)System.out.println(answer); else System.out.println("-1"); } public static void dfs(int val, int next) { if(val==m) { bfs(0); return; } else { for(int i=next; i<list.size(); i++) { //list에서 m개뽑자 pm[val]=i; dfs(val+1,i+1); } } } public static void bfs(int val) { int[][] copyarr=new int[n][n]; int[][] dis=new int[n][n]; Queue<Pointo> q=new LinkedList<>(); for(int i=0; i<pm.length; i++) { int l=pm[i]; int qx=list.get(l).x; int qy=list.get(l).y; q.add(new Pointo(qy,qx)); copyarr[qy][qx]=2; } //copyarr 벽 만들기 for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { if(arr[i][j]==1) { copyarr[i][j]=1; } } } while(!q.isEmpty()) { Pointo p=q.poll(); for(int i=0; i<4; i++) { int nx=p.x+dx[i]; int ny=p.y+dy[i]; if(nx>=0 && ny>=0 && nx<n && ny<n) { if(copyarr[ny][nx]!=1) { copyarr[ny][nx]=2; dis[ny][nx]=dis[p.y][p.x]+1; q.add(new Pointo(ny,nx)); } } } } count(copyarr,dis); } public static void count(int[][] arr, int[][] dis) { int maxy=0; for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { if(dis[i][j]>maxy) maxy=dis[i][j]; } } answer=Math.max(maxy,answer); }}
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
배열 6 뒤집은 소수 문제
강사님이 알려주신 정답에서 다른 풀이 함수만 써서 쪼금 응용했는데왜 런타임 에러가 계속 뜰까요 ㅠ한참을 고민해봐도 왜 안되는지 답이 안나오네요 ㅠ import java.util.*;class Main {public boolean isPrime(int num){if(num==1) return false;for(int i=2; i<num; i++){if(num%i==0) return false;}return true;}public ArrayList<Integer> solution(int n, int[] arr){ArrayList<Integer> answer = new ArrayList<>();for(int i=0; i<n; i++){int tmp=Integer.parseInt(new StringBuilder(arr[i]).reverse().toString());if(isPrime(tmp)) answer.add(tmp);}return answer;}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];for(int i=0; i<n; i++){arr[i]=kb.nextInt();}for(int x : T.solution(n, arr)){System.out.print(x+" ");}}}
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
크레인 인형뽑기(카카오) 왜 오답이 뜨는지 모르겠어요 ㅠㅠ
package hello; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.Stack; public class Main { public int solution(int n, int[][] board, int m, int[] moves) { Stack<Integer> baguny = new Stack<>(); int count = 0; //크레인 for(int i=0; i<moves.length; i++) { //크레인 작동위치에서 인형빼와서 바구니에 담기 for(int j=0; j<board.length; j++) { if(board[j][moves[i]-1] != 0) { if(baguny.contains(board[j][moves[i]-1])) { baguny.pop(); count += 2; board[j][moves[i]-1] = 0; break; } else { baguny.push(board[j][moves[i]-1]); board[j][moves[i]-1] = 0; break; } } } } return count; } public static void main(String[] args) { Main t = new Main(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] board = new int[n][n]; for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { board[i][j] = sc.nextInt(); } } int m = sc.nextInt(); int[] moves = new int[m]; for(int i=0; i<m; i++) { moves[i] = sc.nextInt(); } System.out.println(t.solution(n, board, m, moves)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
배열 2_6번 런타임에러
배열을 이용하지 않고 StringBuilder 를 이용해서 코드를 짜봤는데 런타임에러가 뜹니다따로 이유가 있나요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
[오타] 2-4. 피보나치 수열
안녕하세요, 김태원 강의자님!강의 잘 듣고 있습니다 :)채점 사이트에 오타가 있어 글을 남깁니다.환절기 건강 조심하시기 바랍니다 🙂☘️ [오타 내용]2-4. 피보나치 수열설명 1) '피보나키' 수열
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
이중 for문 런타임 에러 문제
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요.제가 이번 문제를 two pointers 알고리즘으로 풀기 이전이중 for문으로 구현을 했었는데요, 채점 사이트에서 돌려보니 시간 초과가 났습니다.제가 궁금한 점은,지난 문제에서는 4중 for문까지도 채점 사이트에서 정답이 떴었는왜 이번엔 이증 for문도 런타임 에러가 나는지 모르겠습니다.답변주시면 감사하겠습니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
봉우리문제에서 이해가되지않는부분이있습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 받은 행렬은 0으로 초기화 한 가장자리가없는데 왜 그러한 행렬을 만들어주는 작업이 없는거죠?? 잘 이해가 되지않습니다.. 가장자리는 무조건 작다 라고 하는거도 이해가되는데 없는 행렬을 어떻게 비교할수있는지 모르겠습니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
궁금한점있습니다.
안녕하세요. 강사님재귀함수로 구현을 할 때 아래 코드에서 어떤 코드를 추가해야지 원소를 나열 할 수 있을까요? public class Main{ public int solution(int n){ if(n < 3){ return 1; } return solution(n - 2) + solution(n - 1); } public static void main(String[] args) { MainT = new Main(); int n = 10; System.out.println(T.solution(n)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
문제 풀이 내용 기록
안녕하세요 강사님 강의 잘 듣고 있습니다.문제를 풀면서 아래와 같이 주석만 담고 개인적으로 풀이한 내용을 깃허브에 올려도 괜찮을까요? 문제 내용은 따로 작성하지 않고 리드미에 강의 링크를 걸어두려 합니다. 문제들을 직접 만드신 것 같아 문의드립니다. /** * className : Q02 * author : eeesnghyun * date : 2023/02/27 * description : 02-02 보이는 학생 * =========================================================== * DATE AUTHOR NOTE * ----------------------------------------------------------- * 2023/02/27 eeesnghyun 최초 생성 */ public class Q02 {
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
궁금한게생겼습니다.
공부하다가 보니 원소의 개 수 말고 원소를 뽑아내려고 하는데public int solution(int n, int[] arr) { int answer = 1, max = arr[0]; for (int i = 1; i < n; i++) { if (arr[i] > max) { answer = arr[i]; i++; System.out.print(answer + " "); } } return answer; }이렇게 해도 이상하지는 않을까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
바둑이 승차 성능 향상 질문
안녕하세요. 바둑이 승차(DFS) 질문입니다.해당코드에서 성능을 더 향상시킬수있지 않을까 해서 질문드립니다.강사님이 작성하신 코드에서 if(L==N) 전에 if(sum==C)가 나오면 더이상 코드 진행을 하지 않아도 되는거 아닌가요? 그 때 flag값을 하나 추가해서 모든 재귀를 return 시키는 방법을 쓰면 더 좋을것같은데 제 생각이 맞나 궁금하네요.답변 부탁드리겠습니다.감사합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
혼자 코드를 짜봤는데
안녕하세요. 강사님자료구조 공부하다가 방금 전 숫자만 추출하는 강의를 보고 이번 강의에서 응용해 보았는데 출력 값은 동일하나 채점 사이트에서는 오답이라고 나와서 어떤 부분에서 틀렸으며 어떻게 고쳐야 할까요?완전 코드를 잘못 구현했다면 제가 설명에서 어느 부분을 이해하지 못한 것일 까요? import java.util.Deque; import java.util.LinkedList; import java.util.Scanner; public class Main { public int solution(String s) { String answer = ""; s = s.replaceAll("[^0-9]", ""); // 숫자만 추출 while (s.length() > 0 && s.charAt(0) == '0') { s = s.substring(1); } Deque<Character> deque = new LinkedList<>(); // Deque 선언 (제네릭 타입 명시) // 문자열 s의 각 자리를 Deque에 추가 for (int i = 0; i < s.length(); i++) { deque.offer(s.charAt(i)); } // Deque에서는 0 제거 이후 while (!deque.isEmpty()) { char c = deque.peek(); if (c != '0') { answer += c; } deque.poll(); } return Integer.parseInt(answer); } public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); String str = sc.nextLine(); System.out.println(T.solution(str)); } }위 코드는 오류가 나고 아래 코드는 컴파일 에러가 납니다.import java.util.Scanner; public class Main { public int solution(String s) { String answer = ""; s = s.replaceAll("[^0-9]", ""); // 숫자만 추출 while (s.length() > 0 && s.charAt(0) == '0') { answer = s.substring(1); } return Integer.parseInt(answer); } public static void main(String[] args) { StringTest1_9 T = new StringTest1_9(); Scanner sc = new Scanner(System.in); String str = sc.nextLine(); System.out.println(T.solution(str)); } }
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
String 2번 대소문자 변환
제가 짠 코드인데 입력값 : Abdsg 을 입력하면 출력값 : aBDSG 앞에 공백이 생겨 출력이 됩니다.어떤 부분이 잘못된건지 모르겠어서 질문드립니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
배열 2개로 푸는 것도 괜찮은 방법인가요 ?
import java.util.*; import java.io.*; public class P03_결혼식 { public static void main(String[] args) throws Exception { // 초기 세팅 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int[] starts = new int[73]; int[] ends = new int[73]; for (int i=0; i<N; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); int start = Integer.parseInt(st.nextToken()); int end = Integer.parseInt(st.nextToken()); starts[start]++; ends[end]++; } // 로직 int max = 0; int count = 0; for (int i=0; i<starts.length; i++) { count += starts[i]; count -= ends[i]; max = Math.max(max, count); } // 출력 System.out.println(max); } } 저는 이렇게 풀었는데 따로 정렬하는 Class 안 만들고 이렇게 하는것도 괜찮나여 ? 방대한 데이터가 들어왔을 경우에도 문제없는 코드인지 궁금합니다 !