월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
DFS static변수 선언할떄 flag엔 static을 붙이지 않은 이유가 있나요?
어차피 정적변수나 전역변수나 쓰임이 비슷한거같기는 한데.... 딱 flag만 정적변수로 안하시더라구요 혹시 이유가있을까요??
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
손코딩 이후 IDE에 코드 작성하는 방법
안녕하세요! 강의 잘 듣고 있는 학생입니다.선생님 저 같은 경우 코딩 테스트 문제를 풀때, 컴퓨터(IDE)에 바로 작성하지 않고 노트에 solution 부분의 코드를 전부 손코딩으로 작성 해본 뒤에 컴퓨터로 작성합니다. 이런 방식이 코딩테스트 시험 볼때는 시간제한이 있으니,, 비효율적인지 궁금합니다. (현재는 코드가 짧아서 상관 없다고 생각하지만, 어려운 문제들.. 즉, 코드가 길어 지는 문제들을 풀때 문제가 되지 않을까? 생각하여 이렇게 질문을 남깁니다) 이렇게 하게 된 이유는, 펜으로 작성해보지 않고 바로 코드를 타이핑 하려니 생각이 잘 떠오르지 않아 이렇게 하게 되었습니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
큐 사용시 add(), remove()
Queue에 add() 메서드와 remove() 메서드를 사용할 수 있던데, 이걸 사용해도 되는지 궁금합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
뒤집은 소수 / 런타임 에러 + 궁금증
안녕하세요 강사님예시 문제는 합격하는데 다른 4개의 테스트 케이스는 통과하지 못하고 있습니다.문제는 런타임에러가 뜨는데 왜 뜨는지 정확한 이유를 아무리 보아도 모르겠습니다...많이 더러운 코드지만 무엇이 문제인지 확인 한번 부탁 드리겠습니다...import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public String solution(String str) { String answer = ""; String[] arr = new StringBuilder(str).reverse().toString().split(" "); List<Integer> list = new ArrayList<>(); for (String s : arr) { int target = Integer.parseInt(s); if (target != 2 && target % 2 == 0) continue; if (target == 1) continue; boolean check = true; for (int j = 3; j <= Math.sqrt(target); j+=2) { if (target % j == 0) { check = false; break; } } if (check) list.add(target); } for (int i =list.size()-1; i >= 0; i--) { answer += list.get(i) + " "; } return answer; } public static void main(String[] args) { Scanner in = new Scanner(System.in); int input1 = in.nextInt(); in.nextLine(); String str = in.nextLine(); Main main = new Main(); System.out.println(main.solution(str)); return; } }알아낸점저와 비슷한 사례를 겪는 분들을 질문창에서 발견하고 강사님이 적어두신 2번 케이스의 문제를 복사해서 적어보았는데 통과하였습니다.저는 split() 메서드를 이용해서 입력받은 문자열을 배열로 변경하는데 이때 문자열 맨 뒤에 공백이 존재하게 되면 런타임 에러가 발생 하는것을 확인했습니다. 아무래도 그부분 때문인것 같은데 맞다면 확인 한번 부탁드리겠습니다.변경코드를 수정하였습니다.import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public String solution(String[] arr) { String answer = ""; for (int i = 0; i < arr.length; i++) { String s = new StringBuilder(arr[i]).reverse().toString(); int target = Integer.parseInt(s); if (target != 2 && target % 2 == 0) continue; if (target == 1) continue; boolean check = isPrime(target); if (check) answer += target + " "; } return answer; } private boolean isPrime(int target) { for (int j = 3; j <= Math.sqrt(target); j+=2) { if (target % j == 0) { return false; } } return true; } public static void main(String[] args) { Scanner in = new Scanner(System.in); int input1 = in.nextInt(); String[] arr = new String[input1]; for (int i = 0; i < input1; i++) { arr[i] = in.next(); } Main main = new Main(); System.out.println(main.solution(arr)); return; } } 이렇게 하니 해결되었습니다. 궁금증혹시 실제 코딩테스트 볼때도 split을 사용할때 요청값끝부분에 있는 공백의 존재 가능성도 염두해두고 사용을 해야하나요? 아니면 단순 이 사이트의 실수였을까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
테스트 케이스가 실패합니다
import java.util.Scanner; public class Main { int[] dx = {-1, 0, 1, 0}; int[] dy = {0, 1, 0, -1}; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); int[][] arr = new int[num][num]; for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) { arr[i][j] = sc.nextInt(); } } Main T = new Main(); System.out.print(T.solution(num, arr)); } public int solution(int num, int[][] arr) { int answer = 0; for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) { boolean flag = true; for (int k = 0; k < 4; k++) { int nx = i + dx[k]; int ny = j + dy[k]; if (nx >= 0 && nx < num && ny >= 0 && ny < num && arr[nx][ny] > arr[i][j]) { flag = false; break; } } if (flag) { answer++; } } } return answer; } }정답을 요청한 코드입니다. 처음테스트와 두번째 테스트 케이스는 통과하나 그 이후 테스트 케이스는 실패한다고 나오네요.. 코드는 강사님이 작성해주신 코드와 동일하게 작성했는데.. 원인을 모르겠어서 질문 남깁니다
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
문법질문입니다.
import java.nio.channels.Pipe; import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; class Point implements Comparable<Point>{ public int x, y; Point(int x, int y){ this.x = x; this.y = y; } @Override public int compareTo(Point o){ if(this.x == o.x) return this.y-o.y; else return this.x-o.x; } } class Main{ public static void main(String[] args){ Scanner kb = new Scanner(System.in); int n = kb.nextInt(); ArrayList<Point> arr = new ArrayList<>(); for(int i = 0; i < n; i++){ int x= kb.nextInt(); int y= kb.nextInt(); System.out.println(x+","+y); arr.add(new Point(x, y)); } Collections.sort(arr); System.out.println(">>"); for (Point o: arr) System.out.println(o.x+" "+o.y); } } arr.add(new Point(x, y));이 부분을 출력해서 값을 프린트하고 싶은데 어떻게 코드를 짜야하나요??public static void main(String[] args){ Scanner kb = new Scanner(System.in); int n = kb.nextInt(); ArrayList<Point> arr = new ArrayList<>(); for(int i = 0; i < n; i++){ int res; int x= kb.nextInt(); int y= kb.nextInt(); System.out.println(x+","+y); arr.add(new Point(x, y)); res = arr.add(new Point(x, y)); System.out.println(res); }이렇게 res 변수를 만들어서 작석했는데 에러가 나네요 ㅠ 도와주세요ㅠㅠㅠ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
04-03 매출액의 종류 System.out.printf
04-03 매출액의 종류 문제를 풀던 중,System.out.print() 로 출력하면 정답 처리가 되던 부분이System.out.printf()로 출력 할 경우 time exceed 처리가 됩니다. System.out.printf()의 문제인지 궁금합니다.. 아래는 타임아웃된 소스코드인데,강의자료에서 출력문만 변경 한 것입니다. ======================================================== import java.util.*;class Main { public ArrayList<Integer> solution(int n, int k, int[] arr){ ArrayList<Integer> answer = new ArrayList<>(); HashMap<Integer, Integer> HM = new HashMap<>(); for(int i=0; i<k-1; i++){ HM.put(arr[i], HM.getOrDefault(arr[i], 0)+1); } int lt=0; for(int rt=k-1; rt<n; rt++){ HM.put(arr[rt], HM.getOrDefault(arr[rt], 0)+1); answer.add(HM.size()); HM.put(arr[lt], HM.get(arr[lt])-1); if(HM.get(arr[lt])==0) HM.remove(arr[lt]); lt++; } return answer; } public static void main(String[] args){ Main T = new Main(); Scanner kb = new Scanner(System.in); int n=kb.nextInt(); int k=kb.nextInt(); int[] arr=new int[n]; for(int i=0; i<n; i++){ arr[i]=kb.nextInt(); } for(int x : T.solution(n, k, arr)) System.out.printf("%d", x); }}
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
[응급실] 질문 드립니다.
선생님 안녕하세요응급실 문제를 제가 처음 푼 방식대로 채점을 받아 보았는데,문제에 있는 예시 문제는 제대로 통과가 되었는데요.채점 사이트 내에 있는 예시는 오답이 나와 질문 드립니다. 같은 위험도를 가진 수가 나오는 경우) idx가 작거나 같으면 answer++;하는 방식으로 문제를 구현하였습니다.public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int M = 0; Queue queue = new LinkedList(); for (int i=0; i<n; i++){ int a = sc.nextInt(); queue.offer(a); if(i == m){ M = a; } } System.out.println(solution(n,m,M,queue)); } private static int solution(int n, int m, int M, Queue queue) { int answer =0; for (int i=0; i < n; i++){ int que = (int)queue.poll(); if(que > M){ answer++; } else if(que == M && i <= m){ answer++; } } return answer; } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
01-01. 문자찾기에서 부호 >= 와 > 의 차이가 궁금합니다.
선생님 안녕하세요. 01-01. 문자찾기 문제를 푸는 중에 궁금한 점이 생겨서 질문 드립니다. import java.util.Scanner; public class Ch01_1 { public int solution(String s, char c) { int solution = 0; s = s.toUpperCase(); c = Character.toUpperCase(c); for(int i=0 ; s.length() > i; i++ ) if(s.charAt(i)== c) solution++; } return solution; } public static void main(String[] args) { Ch01_1 ch = new Ch01_1(); Scanner sc = new Scanner(System.in); String s = sc.next(); char c = sc.next().charAt(0); sc.close(); System.out.println(ch.solution(s,c)); } }여기서 상단의 for(int i=0 ; s.length() > i; i++ ) 부분에서 궁금한 점이 있는데요 ! 선생님이 알려주신 풀이인 s.length() >= i 가 아니라 s.length() > i로 풀면 아래와 같이 오류가 뜨는데, 이유가 궁금해서요 ! ! >= i 랑 > i 랑 큰 차이가 있는건가요? 반복횟수랑 문자열 s의 길이가 '같거나 작을 경우' 라는 조건은 안되는걸까요?? (오류 사진입니다.)
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
강사님 소수 구하는 부분에서 질문있습니다!
여기서 num이 2일때는 어떻게 진행되나요? i=2 부터인데 i<2 일때 까지 작용하는 조건이잖아요 자연수가 2일때 이렇게 해도 정상적으로 작동되나요? 그리고 문법적인걸로 궁금한게 있는데보통 Main 에서 solution 메서드 쓰기 위해서 T 를 통해서 객체에 접근하잖아요그런데 이번에 isPrime에 접근할 때왜 메인 객체를 생성하지 않고 접근이 가능한건가요?main은 static에 올라가 있고 나머지 solition이랑 isprime은 non-static이라서 non-static 끼리는 서로 바로 이용이 가능한걸까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
다른 풀이로 풀어봤는데 한번 봐주실 수 있나해서요
import java.util.*; /* ** 괄호문자제거 * input (A(BC)D)EF(G(H)(IJ)K)LM(N) * output EFLM */ class Problem2 { public String solution(String str) { String answer = ""; Stack<Character> stack = new Stack<>(); int cnt = 0; // solution 1 for (char x : str.toCharArray()) { // push: stack에 할당 if (x == '(') { stack.push(x); cnt++; } else if (x == ')') { stack.pop(); cnt--; } else { if(cnt <= 0) answer += x; } } // solution 2 // for (char x : str.toCharArray()) { // if (x == '(') stack.push(x); // else if (x == ')') stack.pop(); // else if (stack.isEmpty()) answer += x; // } return answer; } public static void main(String[] args) { Problem2 T = new Problem2(); Scanner kb = new Scanner(System.in); String str = kb.next(); System.out.println(T.solution(str)); } } 혹시 cnt 변수를 선언하여 for 한번으로 풀었는데 일단 accept 떠서 어떤 문제나 예외가 있는 지 한번 봐주실 수 있을까요????
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
리턴 타입을 void로 해서 풀었는데 확인부탁드립니다.
null이 아니면 계속 뻗어나가고 lt와 rt 둘다 null이면 answer 에다가 L의 최소값을 구해나가는 방식입니다.성능의 차이가 있을까요?..import java.util.*; import java.io.*; class Node { int data; Node lt, rt; public Node(int data) { this.data = data; lt = null; rt = null; } } public class Main { static int answer = Integer.MAX_VALUE; public static void dfs(int L, Node root) { if (root.lt == null && root.rt == null) { answer = Math.min(answer, L); } else { if (root.lt != null) dfs(L + 1, root.lt); if (root.rt != null) dfs(L + 1, root.rt); } } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = null; Node root = new Node(1); root.lt = new Node(2); root.rt = new Node(3); root.lt.lt = new Node(5); root.lt.rt = new Node(6); dfs(0, root); System.out.println(answer); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
1개의 테케에서 런타임오류가나는데 왜인지 모르겠습니다.
import java.util.HashMap; import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc= new Scanner(System.in); String a = sc.next(); String b = sc.next(); HashMap<Character,Integer> map = new HashMap<>(); String answer="YES"; for(char x: a.toCharArray()) { map.put(x, map.getOrDefault(x,0)+1); } for(char x: b.toCharArray()) { if(!map.containsKey(x) || map.get(x) == 0) answer="NO"; map.put(x, map.get(x)-1); } System.out.println(answer); } }4-2입니다. 현재 이 상태인데, 한개의 테케에서 런타임오류가 뜨는데 테케가 뭔지 볼수가 없어 왜인지 원인을 못찾겠습니다. 도와주세요
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
연속된 자연수의 합(수학) - 이렇게 풀어도 괜찮을까요?
public int solution(int n) { int answer = 0, sum = 0, lt = 1; for(int rt=1; rt <= n/2+1; rt++) { sum += rt; if(sum == n) answer++; while(sum >= n) { sum -= lt++; if(sum == n) answer++; } } return answer; }이렇게 해도 정답이 되었습니다. 문제가 풀리긴 했지만 좋은 답인지는 잘 몰라서 문의드립니다.
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
각각 sort해서 계산하는 것과 계산한 뒤 모아서 sort하는 것
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.3-2 공통 원소 구하기(two pointers algorithm) 문제입니다. public List<Integer> solution(int n, int[] arr1, int m, int[] arr2) { List<Integer> answer = new ArrayList<>(); Set<Integer> set = new HashSet<>(); for(int i= 0 ; i<n; i++) { set.add(arr1[i]) } for(int i= 0 ; i<m; i++) { if(!set.add(arr2[i])) answer.add(arr2[i]); } answer.sort((o1, o2) -> {if(o1 < o2) return -1; else if(o1 == o2) return 0; else return 1;}); return answer; }위는 제가 수업 전에 작성한 코드입니다.1. HashSet으로 중복된 것을 거르고 List로 넣은 후에2. List를 오름차순으로 정렬순으로 코드를 작성했는데 마지막 테스트 케이스에 시간초과가 발생했습니다. [ 질문 ] sort때문에 시간 초과가 나는 것 같은데, 강사님 방법처럼 갖고있는 모든 원소를 sort하는 것보다 중복된 원소만 모아둔 뒤 sort하는 것이 덜 부담될 것이라 생각했는데 왜 시간초과가 나는 것인가요?여기서 시간초과가 날 것이라는 것을 사전에 미리 알 수 있는 방법이 무엇일까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
정답이지만 채점 사이트에서 오답처리가 됩니다
인텔리제이 상에선 코드가 잘 돌아가며 정답이 나오지만 채점 사이트에서는 오답이라고 나옵니다. 코드 어디 부분이 문제가 되는지 잘 모르겠어서 질문 남깁니다.import java.util.*; public class Main { public String solution(String str){ String answer= "YES"; int len =str.length(); str= str.toUpperCase(); for(int i=0;i<len/2;i++){ if(str.charAt(i)!=str.charAt(len-i-1)){ return "No"; } } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner kb = new Scanner(System.in); String str = kb.next(); System.out.println(T.solution(str)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
선생님 안녕하세요! String toString 차이가 궁금해요
toString 을 쓰는 이유가 주로 어떨때 어떤 이유로 쓰이나요? 구글 쳐보니까 디버깅 용도외에는 안쓰는게 좋다 이러길래 우리가 사용하는 코테수준의 코드에서 어떤 용도와 어떤 이유로 쓰면 좋을지 알고 싶습니다.특히 !! StringBuild 에서 쓰는 이유도요!StringBuild 를 이용하만 일반적인 String 이랑 형이 다르게 변하는 건가요?? 그리고 valueOf같은경우에 저는 주로 charArray 같은 경우를 나중에 String 으로 만들고 싶을때 주로 사용하거든요? StringValueOf(charArr) 이런식으로요 이 기능 외에도 쓰일때가 있나요?코테 수준에서 ValueOf의 주 기능이 알고싶어요있다면 알려주시면 정말 감사하겠습니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
풀어보면 좋은 문제목록 글자가 이상합니다
다 깨진건지 한글로 어떻게 쓰여있는지 알고싶습니다!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
배열 합치기 다른 방법
안녕하세요 강사님 배열 합치기 문제에서제가 먼저 풀었을때는 아래와 같이 풀어서 accept가 떴긴 했는데 강사님이 강의해주신 코드와 제 코드 시간 비교를 해보니 10ms 정도 차이가 나더라고요 (제 코드가 조금 더 running time이 깁니다.)혹시 아래 코드를 코딩테스트에서 사용해도 딱히 무방한가요??? - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. import java.util.*; public class Main { public ArrayList<Integer> solution(int n, int[] arr1, int m, int[] arr2) { ArrayList<Integer> answer = new ArrayList<>(); for (int x : arr1) answer.add(x); for (int x : arr2) answer.add(x); Collections.sort(answer); return answer; } public static void main(String[] args) { Main T = new Main(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); int[] arr1 = new int[n]; for (int i = 0; i < n; i++) { arr1[i] = kb.nextInt(); } int m = kb.nextInt(); int[] arr2 = new int[m]; for (int i = 0; i < m; i++) { arr2[i] = kb.nextInt(); } for (int x : T.solution(n, arr1, m, arr2)) { System.out.print(x + " "); } } }
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
송아지 찾기 문제
package dfs_and_bfs; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; public class Solution_7 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String positions[] = br.readLine().split(" "); int S = Integer.parseInt(positions[0]); int E = Integer.parseInt(positions[1]); Queue<Integer> queue = new LinkedList<>(); int levels[] = new int[10001]; boolean[] visited = new boolean[10001]; queue.offer(S); levels[S] = 0; visited[S] = true; int[] dis = {1, -1, 5}; while(!queue.isEmpty()) { int pos = queue.poll(); if(pos == E) { System.out.println(levels[pos]); break; }else { for(int i = 0; i < dis.length; i++) { int newPos = pos + dis[i]; if(newPos >=1 && newPos <= 10000 && !visited[newPos]) { queue.add(newPos); levels[newPos] = (levels[pos] + 1); visited[newPos] = true; } } } } } } 혹시 이런 식으로 구현하게 되면 levels 라는 배열이 필요하게 되는데 맞나요? 채점 사이트에서는 맞았다고 나옵니다