수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
강사님 오류맞나요?
int[] temperatures = { 73,74,75,71,69,72} 인 경우 // 2중 for public static int[] solve_for(int[] tem) { //1.ds int len = tem.length; int[] result = new int[len]; int count=0, j ; //for for(int i=0;i<len;i++) { for(j=i+1;j<len;j++) { if(tem[i] < tem[j]) { count++; break; }else { count++; } } if(j == tem.length) result[i] = 0; else result[i] = count; count = 0; } return result; } 이렇게 안쪽에 있는 for를 len까지 돌려야지 정상적으로 답이 나올수있네요 j == tem.length가 안되면서 2가 들어가버리네요
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
강사님 시간 복잡도에 대해서 질문드립니다.
강사님 말로 표현하기가 좀 힘든데..ㅠ 일단 최대한 노력해서 써보겠습니다. 음 제가 이 문제를 맨처음에 도전할 떄 2중 for문으로 하면 쉽겠다라고 생각했는데 temperatures.length가 10의5승까지여서 2중for문으로 하면 안되겠다고 생각해서 계속 O(n)으로 풀 수 있을까 고민했거든요.. 음 문제를 접근할 때 일단 O(n2)이나 O(nm)으로 풀 수 있으면 일단 그렇게 풀어보고 나서 시간복잡도를 줄일 수 있는 방법을 생각해 봐야하는건가요?ㅠㅠ 아 그리고 추가적으로 기본 자료구조와 알고리즘을 공부하고 수강해야되나요?ㅠ..
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
질문입니다.
//2.for while int start = intervals[0][0]; // 1 int end = intervals[0][1]; // 4 for(int[] i : intervals) { if(end >= i[0]) { // end = Math.max(end, i[1]); }else { result.add(new int[] {start,end}); start = i[0]; end = i[1]; } } 맨처음에는 start = 1이고 end = 4 인데 start랑 end를 해놓은게 맨처음 값을 미리 빼놓을려고 선언한 것으로 이해했는데 for문을 돌때 for-each로 돌면 맨처음에 intervals에서 뽑아온 배열은 intervals[0] 이니까 똑같은행동을 2번하게되서 차라리 i=1부터 하는게 좋지 않을까싶어서요..
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
문제에 대한 이해
문제를 제가 잘못이해한건가요?ㅠ 처음 -가 나오기 전에 그룹은 그냥 그대로 나오고 그 다음 그룹부터 K개만큼 그룹화하는 걸로 이해했거든요.. 예를들어 INPUT : s = "8F3Z-2e-9-w", k = 2 OUTPUT : "8F3Z-2E-9W" 이런식으로 나와야되는게 아닐까요? 그래서 public static void main(String[] args) { String str = "8F3Z-2e-9-wabcdef"; // String str = "8F3Z-2e-9-w"; // String str = "8-5g-3-J"; int k =2; System.out.println(solve(str, k)); } public static String solve(String str, int k ) { //처음 대쉬가 나오는 인덱스 int index = str.indexOf("-"); //1. - del String newStr= str.replace("-", ""); System.out.println("1: "+newStr); //2. upper newStr= newStr.toUpperCase(); System.out.println("2: "+newStr); //3. k개로 파싱하기, 그리고 - 넣기 StringBuilder sb = new StringBuilder(newStr); System.out.println("3: "+newStr); // "8F3Z2E9W" int len = sb.length(); for(int i=k; i<len; i=i+k) { if(len-i < index) { break; } sb.insert(len-i, '-'); } return sb.toString(); } 이런식으로 소스를 수정해봤습니다.
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
visited 체크 시점 질문있습니다!
bfs에서는 우선 탐색을 하다가 해당부분이 true가 아니면(continue) true 체크를 하는데 dfs에서는 방문시점에 바로 visited true로 체크를하는데 이와같이 true로 방문 체크를 하는 시점이 다른 이유가 뭘까요?
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
연산과정 질문이 있습니다!
처음 next에 2,next -> 3,null 을 담고 prev는 초기값 null인것 까지는 알겠는데, cur.next 값이 어떻게 1,null 이 되는지 이해가 잘 안되네요 ㅠㅠ cur.next 값은 2,next -> 3,null에 해당하는것같은데 1,null이 갑자기 뚝 떨어지는게 이해가안됩니다ㅠ
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
meetingroom에서 comp ㅠㅠ이해가..
comparator가 util 모듈로 임포트 되서 }; 인건가요? Comparator<Interval> Comp = new Comparator<Interval>() { @Override public int compare(Interval a, Interval b) { // TODO Auto-generated method stub return a.start - b.start; } };
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
강의 영상 내 코드 오타일까요?
안녕하세요 강사님. String & Array 챕터의 SpiralMatrix 문제 풀이 맨 마지막인 up 방향 부분 영상 내 코드 오타가 있는 것 같습니다. 영상에는 result.add(matrix[rowEnd][colStart]) 로 나와 있더라구요. 아래 코드처럼 작성하는게 맞을 것 같은데.. 확인 부탁드립니다. 답변 미리 감사합니다. // up if(colStart <= colEnd) { for(int i=rowEnd; i>=rowStart; i--) { result.add(matrix[i][colStart]); } colStart++; }
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
if(carry == 1) p3.next = new ListNode(1); 부분이요
마지막에 넣어주는 if(carry == 1) p3.next = new ListNode(1); 이코드는 carry를 0으로 초기화해주지 않는데 꼭 있어야하는 부분인가요? 없어도 결과값은 똑같이 나와서요
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
복잡도
이 솔루션의 경우, 시간복잡도와 공간복잡도 계산은 어떻게 되나요?
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
왜 newhead의 첫번째 val이 0이 되어야 하는지 모르겠습니다ㅠㅠㅠ
그냥 더한 값을 바로 넣어주면 안되는 이유가 뭘까요?
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
Unique Email Addresses 질문 드립니다.
안녕하세요, 강사님. Unique Email Addresse 강의 보던중 궁금한점이 있어 질문 드립니다. 저는 replace 함수를 사용해서 구현해 보았는데요. StringBuilder 를 사용하는 것이 코테에서 더 높은 점수를 받는지 궁금합니다. StringBuilder 말고도.. 다른 코테에서 가산점을 받을 만한 내용들이 있을까요? 예를들면 필요한 경우 함수를 만들어 호출하거나 하는 등..의 내용이요. public static int numUniqueEmails(String[] emails){ int result = 0; Set<String> set = new HashSet<>(); for(String email: emails) { String tmpLocal = makeLocalName(email); String tmpDomain = makeDomainName(email); set.add(tmpLocal+tmpDomain); } for(int i=0; i<emails.length; i++) { String tmpLocal = ""; String tmpDomain = ""; tmpLocal = emails[i].substring(0, emails[i].indexOf("+")).replace(".", ""); tmpDomain = emails[i].substring(emails[i].indexOf("@")); set.add(tmpLocal+tmpDomain); } result = set.size(); return result; } 답변 미리 감사드립니다.
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
Level Order Of BinaryTree 질문드립니다.
안녕하세요. 강사님. Level Order Of BinaryTree 강좌 내용중 궁금한 내용이 있어서요. 맨 처음 아래 코드를 통해 Queue 에 TreeNode 객체를 추가하면 Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); 강좌에 있는 아래의 모양으로 셋팅되는 부분은 이해가 되는데요. 아래 코드의 중간 부분 for 영역에서 가로로 돌아가는지 이해가 되질 않습니다. while(!queue.isEmpty()) { int size = queue.size(); List<Integer> list = new LinkedList<>(); for(int i=0; i<size; i++) { TreeNode node = queue.poll(); list.add(node.val); if(node.left != null) { queue.offer(node.left); } if(node.right != null) { queue.offer(node.right); } } result.add(list); } Q1. 어떻게 가로로 순차로 돌아가는 것인지.. 왜 queue.size = 3 이 나오는지도요. i=0, 3 i=1, 4 -> 5 i=2, 6 -> 7 Q2. node.left 와 node.right 를 다시 queue.offer 해주고 있는데 이 부분이 어떻게 처리되는지.. 번거로우시겠지만 그림으로 설명을 부탁드려도 될까요?
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
Merge k Sorted Lists 질문 드립니다.
안녕하세요 강사님. 우선순위 큐 관련 질문 드립니다. 아래 코드와 같이 ListNode 배열 객체인 listNode 를 오름차순으로 설정한 우선순위 큐 에 셋팅(offer) 을 한 후 ListNode l1 = new ListNode(1); l1.next = new ListNode(4); l1.next.next = new ListNode(5); ListNode l2 = new ListNode(1); l2.next = new ListNode(3); l2.next.next = new ListNode(4); ListNode l3 = new ListNode(2); l3.next = new ListNode(6); ListNode[] listNode = {l1, l2, l3}; // ------------중간 생략 ----------------// PriorityQueue<ListNode> pq = new PriorityQueue<ListNode>(Comp); for(ListNode node : lists) { if(node != null) { pq.offer(node); } // print(node); // System.out.println("1 node.val: " + node.val); // System.out.println("1 pq.peek(): " + pq.peek().val); } 왜 아래 코드와 같이 다시 offer 를 하는지 궁금합니다. 이미 위 에서 offer 를 했기 때문에 다시 offer 를 하면 중복된 값이 들어가는게 아닌가 하는 생각이 들어서요. while(!pq.isEmpty()) { ListNode node = pq.poll(); p.next = node; p = p.next; if(node.next != null) { pq.offer(node.next); } //System.out.println("2 pq.peek(): " + pq.peek().val); } 답변 부탁드립니다. 감사합니다.
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
MeetingRoom2 질문드립니다.
안녕하세요. 강사님. 미팅룸2 강의 내용 질문드립니다. 특정 케이스 에서 PrioryQueue 의 사이즈가 '실제 사이즈 -1' 된 값으로 리턴되는 현상이 발생하더라구요.. 혹시 왜 그런지 알 수 있을까요? 소스코드도 같이 첨부합니다. package CH1_StringArray; import java.util.Arrays; import java.util.PriorityQueue; import java.util.Queue; /* class Interval { int start; int end; Interval() { start = 0; end = 0; } Interval(int s, int e) { start = s; end = e; } } */ public class T6_MeetingRoom2 { /* Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si < ei), find the minimum number of conference rooms required. Input: [[0,30],[5,10],[15,20]] Output: 2 Input: [[7,10],[2,4]] Output: 1 */ public static void main(String[] args) { // 2 -> 2, true // Interval in1 = new Interval(0, 30); // Interval in2 = new Interval(4, 9); // Interval in3 = new Interval(5, 15); // Interval in4 = new Interval(10, 16); // Interval[] intervals = {in1, in2, in3, in4}; // 1 -> 0, False // Interval in1 = new Interval(7, 10); // Interval in2 = new Interval(2, 4); // Interval[] intervals = {in1, in2}; // 2 -> 1, False Interval in1 = new Interval(0, 30); Interval in2 = new Interval(5, 10); Interval in3 = new Interval(15, 20); Interval[] intervals = {in1, in2, in3}; T6_MeetingRoom2 a = new T6_MeetingRoom2(); System.out.println(a.solve(intervals)); } public int solve(Interval[] intervals) { if(intervals == null || intervals.length == 0) return 0; Arrays.sort(intervals, (Interval a, Interval b) -> a.start - b.start); print(intervals); System.out.println("===================="); // MinHeap Queue<Interval> pq = new PriorityQueue<>((Interval a, Interval b) -> a.end - b.end); // Add pq.offer(intervals[0]); System.out.println("pq.peek(): " + pq.peek().start + "/" + pq.peek().end); System.out.println("===================="); for(int i=1; i<intervals.length; i++) { // pq.offer(intervals[i]); if(pq.peek().end <= intervals[i].start) { // i=1, 4 <= 7 // Remove pq.poll(); } else { pq.offer(intervals[i]); } } return pq.size(); } public static void print(Interval[] intervals) { for(int i=0; i<intervals.length; i++) { System.out.println(intervals[i].start + "/" + intervals[i].end); } } }
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
시간 복잡도는 O(N²)인가요?
그리고 sliding window 방식으로 푸는 것도 올려주실 수 있을까요??
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
BFS DFS 선택 문의
해당 문제의 input이 적을 경우에는 DFS로 풀어도 되는데, 엄청 큰 input 일 경우에는 BFS 로 풀어야 하는거 아닌가요? 해커랭커에 비슷한 유형의 문제를 DFS 로 하면 작은 input 에서는 통과가 되는거 같은데, 큰 input 에서는 콜스택 초과 에러가 나서 BFS 로 해결이 되네요. 콜스택을 쓰는게 의미있는 (문자열 순서를 맞춰서 찾는다던지)게 아니라 병렬형태로 카운팅 하는 부분은 그냥 BFS 를 쓴다고 생각하면 될까요? https://www.hackerrank.com/contests/iit-guwahati-placement-preparation-test-02/challenges/largest-island
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
음.. solve2 이상한거 아닌가요?
[0, 30], [4, 9], [5, 15], [10, 16] 이런식으로 4개를 input 으로 할 경우.. 실제로는 강의실 3개면 되는데, solve2 로는 4개가 나오는거 같아요. minHeap.peek() 만으로 intervals[i] 랑 비교를 해서 그런거 같은데.. 근본적으로 PQ 를 사용하면 안 되는거 아닌가 싶어요. Q에 들어가는 값이 강의실별 선점된 시간일텐데.. intervals 를 for 돌리면서 바로 강의실 별 선점 시간을 지워버리면.. [10, 16] 처럼 직전이 아닌 이전 강의실에 할당 할 수 있는 경우는 대응이 안 될거 같아요.
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
릿코드에서 선생님 소스로 돌리면 에러가 발생합니다.
영상을 보기전에 기존 이중for문으로 풀어보고 https://leetcode.com/problems/two-sum/submissions/ 에서 리팩토링된 선생님의 소스를 보고 적용해 봤는데 단위케이스에서 아웃풋이 다르게 나오길래 뭔가 안맞는 부분이 있었습니다. 제가 혹시 잘못본건지 확인 부탁드려요. 캡쳐 드립니다. 아래 사진은 이중 for문으로 구현한겁니다.
- 미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
안녕하세요. int n = grid[0].length가 궁금합니다.
현재 문제에서는 row, column이 정해진 사이즈라서 grid[0]으로 하신건가요? 만약에 변수를 이용한다면... 재귀를 탈출하려는 조건문 즉, if(i<0||i>=m ....) return; 이 다음에 int n = grid[i].length 와 같이해도 되겠죠?