월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
유의미한 시간 차이
안녕하세요, 강의 덕분에 알고리즘 잘 배우고 있습니다. 강사님 답안을 참고하면서 구현을 하고 있는데요. 1. Main 클래스를 public 지정 여부 2. Queue = new LinkedList<>() 에 <> 를 붙여주는 것 여부에 따라서 20ms 씩 시간 차이가 났습니다. * (1) public class Main + Queue = new LinkedList<>(): 1961ms * (2) class Main + Queue = new LinkedList<>() 1986ms * (3) class Main + Queue = new LinkedList(): 2000MS * (3) public class Main + Queue = new LinkedList(): 2013MS 20ms 는 유의미한 시간 차이인가요? 여러 코드를 테스트 해볼 때, 어느 정도 부터가 성능에 영향이 간다고 할 수 있는 정도인지 궁금합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
강사님 메모이제이션 코드가 잘못된것 같습니다.
private int fibo(int n) { if (n == 1) return 1; else if (n == 2) return 1; else { if (mem[n] != 0) { return mem[n]; } else { mem[n] = fibo(n - 2) + fibo(n - 1); return mem[n]; } }} 위가 적정한 메모이제이션 코드가 아닐까 싶습니다. 예시로 작성한 코드는 fibo 함수 에서 배열내 저장된 값이 없을때만 연산을 해야하는데 배열내 저장여부와 관계없이 매 호출 마다 연산을 하니 결과값이 늦게 출력되는것 같습니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
while문 하나만 사용해서 문제를 풀었는데 길이 계산 식이 왜 이렇게 되는지 궁금합니다.
import java.util.Scanner; class Main { public int solution(int n, int k, int[] arr) { int answer = 0, lt = 0, rt = 0, kr = k; while (rt < n) { if (arr[rt] == 0) { if (kr > 0) { kr--; rt++; } else { if (arr[lt] == 0) { kr++; lt++; } else lt++; } } else { rt++; } if (answer < rt-lt) answer = rt-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(); System.out.println(T.solution(n, k, arr)); } } 강사님이 풀은 방식과는 동일하게 작동하는 것일텐데 rt 와 lt 길이 계산이 rt-lt+1 이 아닌 rt-lt 로 해줘야 맞는 결과가 나오네요 왜 이런 것인가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
tmp.length
ch[i] == 1인 경우에만 tmp에 추가하는 것 자체자 공집합을 제외하는거 아닌가요??! 두번째 if문의 필요성을 잘 모르겠어요ㅠㅠ
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
문제 출제의도 질문
안녕하세요 강사님 강의를 보다 궁금한 점이 생겨서 글을 남깁니다. 저는 해당 문제를 먼저 풀면서 (해쉬)라는 키워드를 놓치고 문제를 풀게 되었습니다. 그래서 방식을 char 두개의 배열을 모두 정렬시키고 배열을 순회하며 같은 인덱스의 문자열이 같은지 비교해서 하나라도 일치 하지 않다면 NO를 리턴하고, 전부가 같다면 YES를 리턴하는 함수를 만들어서 문제를 풀었습니다. 여기서 질문은 정렬이 들어가면서 시간 복잡도가 nlogn으로 늘어나긴 했지만 시간 제한 안에는 문제가 풀렸습니다. 그런데 해당 문제가 코테에 나오게 된다면 문제 출제 의도를 무조건 '해쉬'로만 봐야 할까요 ? 채점자에 따라 다르겠지만 통상적으로 어떤 시선으로 바라보게 되는지가 궁금합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
toString과 String,valueOf
public String solution(String str) { String answer; char[] s = str.toCharArray(); int lt = 0, rt = s.length - 1; while (lt < rt) { if (!Character.isAlphabetic(s[lt])) lt++; else if (!Character.isAlphabetic(s[rt])) rt--; else { char tmp = s[lt]; s[lt] = s[rt]; s[rt] = tmp; lt++; rt--; } } answer = String.valueOf(s); //answer=s.toString(); return answer; } 위의 코드에서 answer = String.valueOf(s)와 주석처리한 answer=s.toString이 어떤 차이점이 있을까요?? 두 코드 다 s를 스트링으로 바꿔서 answer에 넣어주는거라 생각했는데 주석처리한 코드로 제출하면 오답이라도 나오네요
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
그리디 알고리즘 씨름선수 조건을 만들어야하지 않을까요?
예를들어 테스트 케이스에서 183 65 180 70 180 66 이렇게 있다면 180 66은 선발이 돼야 합니다. 왜냐면 183 65보다 키 작지만 몸무게는 높고 180 70보다 몸무게는 낮지만 키는 같으니까 키와 몸무게 모두 A지원자 보다 높은(크고, 무겁다) 지원자가 존재하면 A지원자는 탈락하고, 그렇지 않으면 선발된다. 위 조건을 생각해보면 3명 모두 선발돼야 합니다. 하지만, 작성해주신 코드에는 maxW가 180 70에서 70으로 바뀌고, 그 후 180 66을 카운팅하지 않기 때문에 문제가 생깁니다. 그래서 같은 키를 가진 선수는 없다고 조건이 있어야 하거나, 밑 처럼 코드가 바뀌어야 한다고 생각합니다. ~~~java @Override public int compareTo(Body o) { if (o.h == this.h) return o.w - this.w; else return o.h - this.h; ~~~ 정렬 방식을 위 처럼 같은 키에서 무게를 내림차순 하고, 밑 처럼 같은 키일 때 최대 무게와 서로 키가 다를 때 최대 무게를 다르게 설정해야 한다고 생각합니다. ~~~java Player prev = new Player(0, 0); Player present = new Player(0, 0); for (int i = 0; i < N; i++) { if (present.k != arr[i].k) { prev.w = Math.max(prev.w, present.w); present.k = arr[i].k; present.w = arr[i].w; } if (prev.w < arr[i].w) { cnt++; } } ~~~
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
코드 한번 검토 부탁드립니다^^
안녕하세요! 강의 보기 전에 다른 방식으로 풀어봤는데 코드 한번 리뷰 부탁드립니다 ㅎㅎ stringBulider의 reverse를 사용했는데 소요시간에 영향을 미치는지 궁금합니다! import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int num = scanner.nextInt(); String [] arrStr = new String[num]; for(int i =0;i<num;i++){ arrStr[i] = scanner.next(); } for(String s : arrStr){ int ans = check(reverse(s)); if(ans != 0){ System.out.print(ans + " "); } } } public static int reverse(String str){ str=new StringBuilder(str).reverse().toString(); return Integer.valueOf(str); } public static int check(int num){ if(num == 1) return 0; for (int i=2;i<num/2;i++){ if(num%i == 0){ return 0; } } return num; }}
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
run time error..
안녕하세요! 질문해주신 다른분들 코드를 봤는데 for문에서 i<num 그리고 j<num과 같이 작성하면 마지막 arr[num]값이 소수인지 체크가 불가능할거같은데 어떻게 생각하시나요?! (강의에서는 i<=n, j<=n과 같이 작성하셨습니다.) package Inflearn;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int num = scanner.nextInt(); System.out.println(solution(num)); } public static int solution(int num){ int [] arr = new int[num+1]; int ans = 0; for(int i=2;i<=num;i++){ if(arr[i] == 0){ ans++; for(int j=i; j<=num; j=j+i){ arr[j] = 1; } } } return ans; }}
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
숙제검사
안녕하세요 선생님. 숙제 코드 잘 작성됐는지 검토 부탁드립니다! import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; // 그래프 최단거리(BFS) level public class Example12 { static int n, m; static int[] answer; static ArrayList<ArrayList<Integer>> graph; static boolean[] visited; static public void bfs(int node) { Queue<Integer> queue = new LinkedList<>(); queue.offer(node); visited[node] = true; int level = 0; while(!queue.isEmpty()) { int length = queue.size(); for(int i=0; i<length; i++) { int v = queue.poll(); answer[v] = level; for(int x : graph.get(v)) { if(!visited[x]) { queue.offer(x); visited[x] = true; } } } level++; } } public static void main(String[] args) { Scanner scan = new Scanner(System.in); n = scan.nextInt(); m = scan.nextInt(); answer = new int[n+1]; visited = new boolean[n+1]; graph = new ArrayList<ArrayList<Integer>>(); for(int i=0; i<=n; i++) { graph.add(new ArrayList<Integer>()); } for(int i=0; i<m; i++) { int x = scan.nextInt(); int y = scan.nextInt(); graph.get(x).add(y); } bfs(1); for(int i=2; i<answer.length; i++) { System.out.println(i + " : " + answer[i]); } } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
BFS로의 풀이에 대해 질문드리고 싶습니다.
안녕하세요 강사님, 강의를 듣다가 동전 문제를 BFS로 풀 수 있을거 같아 이렇게 풀었는데, 괜찮은 코드인지 여쭤보고 싶습니다. import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.*;public class Main { static int N, M, count; static int[] arr; static Queue<Integer> queue = new LinkedList<>(); public void input() throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); arr = new int[N]; st = new StringTokenizer(br.readLine()); for (int i = 0; i < N; i++) { arr[i] = Integer.parseInt(st.nextToken()); queue.offer(arr[i]); } st = new StringTokenizer(br.readLine()); M = Integer.parseInt(st.nextToken()); } public int BFS() { while (!queue.isEmpty()) { count++; int len = queue.size(); for (int i = 0; i < len; i++) { int value = queue.poll(); for (int X : arr) { int data = value + X; if (data == M) return count+1; // 동전의 값을 Queue에 삽입 전에 체크하기 때문에 +1를 추가해서 리턴 if (data < M) queue.offer(data); } } } return count; } public static void main(String[] args) throws Exception { Main main = new Main(); main.input(); System.out.println(main.BFS()); }}
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
데이터량이 적어서인지 무식하게 풀었는데도 답을 구했네요.
import java.util.Arrays; import java.util.Scanner; public class Main { static int n ; public static void main(String[] args) { Scanner in = new Scanner(System.in); Main T = new Main(); n = in.nextInt(); int[] arr = new int[73] ; for(int i=0 ; i< n;i++){ int s = in.nextInt(); int e = in.nextInt(); for(int j= s; j<e ; j++){ arr[j]++; } } System.out.println(Arrays.stream(arr).max().getAsInt()); } } 시간 범위가 0~72 정도여서 72 정도 크기의 배열에 넣고 참석하는 시간 범위동안 1을 더해주는 방식으로 구현하였는데 시간 제한에 걸리지 않고 잘 동작하게 되네요. 물론 시간 범위가 좀더 큰 경우라면 강사님의 풀이대로 풀어야 정확한 답을 구할 수 있을 거라고 생각됩니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
선생님이 맨 앞에 있다고해서 max 초기값을 0으로 설정하고 진행했는데 잘 이해한걸까요....?
public class Main { public static void main(String[] args) { Main T = new Main(); Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = scanner.nextInt(); } System.out.println(T.solution(arr)); } public int solution(int[] arr) { int count = 0; int t = 0; for (int element : arr) { if (element > t) { count++; t = element; } } return count; }} 답은 잘 맞게 나왔는데.. 풀어주신 부분과 이해가 좀 다른것 같아서요. 감사합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
안녕하세요
안녕하세요 선생님 강의 잘보고있습니다 제가 풀은 문제가 어느부분이 틀린지 모르겠어가지고요.. 정답은 정상적으로 나오는데 ㅇ오답처리가되서요ㅠㅠ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
코드리뷰 요청 드려도 될까요?
import java.util.Scanner;public class Main { public static void main(String[] args) { Main T = new Main(); Scanner scanner = new Scanner(System.in); int count = scanner.nextInt(); String input2 = scanner.next(); System.out.print(T.solution(count, input2)); } public String solution(int count, String str) { String answer = ""; StringBuilder temp = new StringBuilder(); int c = 0; for (int i = 0; i < str.length(); i++) { if (str.charAt(i) == '#') { temp.append(1); } else { temp.append(0); } c++; if (c == 7) { int codePoint = Integer.parseInt(temp.toString(), 2); String 해독한문자 = Character.toString((char) codePoint); answer += 해독한문자; temp = new StringBuilder(); c = 0; } } return answer; }} 풀다보니 같이 입력받은 숫자가 필요없어졌네요... 그래도 강사님 풀이가 훨 간단하네요..
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
어떻게 풀어야하는것인가요....?
어떻게 접근해야할 지 감도 오지 않는데... 이런 패턴을 외워둔다고 생각하고 풀면 될까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
LinkedHashSet 으로 풀어도 괜찮을까요?
HashSet으로만 풀었더니 순서를 요구해서 LinkedHashSet으로 풀었습니다. import java.util.LinkedHashSet;import java.util.Scanner;public class Main { public static void main(String[] args) { Main T = new Main(); Scanner scanner = new Scanner(System.in); String input = scanner.next(); System.out.println(T.solution(input)); } public String solution(String str) { String answer = ""; char[] s = str.toCharArray(); LinkedHashSet<Character> set = new LinkedHashSet<>(); for (char c : s) { set.add(c); } for (Character character : set) { answer += character; } return answer; }}
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
문제처럼 N개의 단어가 들어온다면 배열이라고 생각하고 풀어도 될까요?
문제에는 프로그래머스 처럼 배열로 들어온다는 내용이 없었는데 풀이를 보니까 배열로 처음부터 작성하고 푸시네요. 이런 힌트 조차 잡아내서 풀어야하는걸까요?? 감사합니다
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
아무설명없이 갑자기 설명없이 해결방법이 나와서 당황했습니다.
그냥 해결방법 패턴을 외워야하는건가요,..,..??
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
컴파일 에러
컴파일 에러가 뜨는데 어디가 문제인지 모르겠습니다ㅠㅠ class Main { public static int solution(int[] arr) { int count = 1; int max = arr[0]; for(int i=1; i<arr.length; i++) { if(arr[i] > max) { max = arr[i]; count++; } } return count; } } public static void main(String[] args){ Scanner sc = new Scanner(System.in); int num = sc.nextInt(); int[] arr = new int[num]; for(int i=0; i<num; i++) { arr[i] = sc.nextInt(); } System.out.println(test2.solution(arr)); } }