묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
시간초과가 나요
선생님 강의 설명 듣고 저 혼자서 구현해봤는데 구현한 방법은 비슷한 것 같은데 채점돌려보니까 마지막 문제가 시간초과가 걸리네요... 어디가 문제인걸까요? 문제에 대한 정답은 제대로 나오네요.#include <bits/stdc++.h> using namespace std; const int INF = 1e9; int a[704][704], d[704][704], n, m, ret, w, h; int cal(int x, int y) { return d[x][y] - (d[x - h][y] + d[x][y - w] - d[x - h][y - w]); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { cin >> a[i][j]; d[i][j] = d[i - 1][j] + d[i][j - 1] - d[i - 1][j - 1] + a[i][j]; } } cin >> h >> w; for (int i = h; i <=n; i++) { for (int j = w; j <= m; j++) { ret = max(ret, cal(i, j)); } } cout << ret; return 0; }
-
해결됨코딩테스트 [ ALL IN ONE ]
Lowest common ancestor of a binary tree문제 질문❓
Lowest common ancestor of a binary tree문제에서 아래 코드가 정답 코드로 알고 있는데,# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def lowestCommonAncestor( self, root: "TreeNode", p: "TreeNode", q: "TreeNode" ) -> "TreeNode": if root == None: return None left = self.lowestCommonAncestor(root.left, p, q) right = self.lowestCommonAncestor(root.right, p, q) if root.val == p.val or root.val == q.val: return root elif left and right: return root else: return left or right # elif left: # return left # elif right: # return right # else: # reutrn None위 코드에서 아래 부분을 해주는 이유가 무엇인지 궁금합니다.if root.val == p.val or root.val == q.val: return root elif left and right: return root else: return left or right
-
미해결비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
최소힙 remove 구현하기
class MinHeap { // 최소힙 arr = []; #reheapUp(index) { if (index > 0) { const parentIndex = Math.floor((index - 1) / 2); if (this.arr[index] < this.arr[parentIndex]) { const tmp = this.arr[index]; this.arr[index] = this.arr[parentIndex]; this.arr[parentIndex] = tmp; this.#reheapUp(parentIndex); } } } insert(value) { const index = this.arr.length; this.arr[index] = value; // 마지막에 값을 넣어준다. this.#reheapUp(index); } #reHeapDown(index) { const leftIndex = index * 2 + 1; // 왼쪽 Index if (leftIndex < this.arr.length) { // 만약에 왼쪽 인덱스가 총 배열의 길이보다 작은경우 const rightIndex = index * 2 + 2; const smaller = this.arr[leftIndex] > this.arr[rightIndex] ? leftIndex : rightIndex; if (this.arr[index] < this.arr[smaller]) { const temp = this.arr[index]; this.arr[index] = this.arr[smaller]; this.arr[smaller] = temp; this.#reHeapDown(smaller); } } } remove() { // root만 remove if (this.arr.length === 0) { return false; } if (this.arr.length === 1) { // 마지막 하나 남으면 pop해서 리턴해주기 return this.arr.pop(); } const root = this.arr[0]; this.arr[0] = this.arr.pop(); this.#reHeapDown(0); return root; } sort() { // 힙 정렬 const sortedArray = []; while (this.arr.length > 0) { sortedArray.push(this.remove()); } return sortedArray; } search(value) { for (let i = 0; i < this.arr.length; i++) { if (arr[i] === value) { return i; } } } } const minheap = new MinHeap(); minheap.insert(78); minheap.insert(56); minheap.insert(45); minheap.insert(32); minheap.insert(23); minheap.insert(19); minheap.insert(8); console.log(minheap.arr); minheap.remove(); minheap.remove(); minheap.remove(); minheap.remove(); minheap.remove(); minheap.remove(); 최대힙 코드를 최소힙 구하기 코드로 바꿔봤습니다. 질문1) 최소힙 구하기 remove 코드가 맞을까요?질문2) 최대힙이든 최소힙이든 sort 메서드가 sort 메서드 호출시 remove 메서드를 while문 루프로 호출하여서 sort 메서드 실행 후에 this.arr가 당연하게 빈배열이 되는데 while문 전에 this.arr를 변수에 담아두었다가 while 루프가 끝난후에 다시 this.arr 멤버변수에 넣어주어야 하는거 아닌가 궁금합니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
최대부분증가수열(LIS) 오답 질문
이번 강의 코드와 100% 유사한 백준 문제가 있어서 풀었는데 98%에서 오답처리 되었습니다.강사님의 강의를 이해하고 풀다보니 강의와 코드가 똑같은데 왜 오답이 나오는건가요?? https://www.acmicpc.net/problem/11053제 코드는 이렇습니다.import java.util.*; class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] arr= new int[n]; for(int i=0; i<n; i++) arr[i] = sc.nextInt(); int[] dp= new int[n]; int answer=0; dp[0]=1; //solve for(int i=1; i<n; i++){ int tmp=0; for(int j=i-1; j>=0; j--){ if(arr[i] > arr[j]) tmp=Math.max(tmp, dp[j]); } dp[i]=tmp+1; answer=Math.max(answer,dp[i]); } System.out.println(answer); } }
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
3.2 공통원소 구하기 에서 질문입니다.
샘플문제는 정답인데, 채점사이트에서는 오답으로 나오네요.어디가 잘못되었는지 못찾겠습니다. import java.util.*;class Main { public ArrayList<Integer> solution(int n, int[] arr1, int m, int[] arr2) {ArrayList<Integer> answer = new ArrayList<>(); Arrays.sort(arr1);Arrays.sort(arr2); int p1=0, p2=0; while(p1<n && p2<m) {if(arr1[p1]==arr2[p2]) {answer.add(arr1[p1]++);p2++;}else if(arr1[p1]<arr2[p2]) p1++;else p2++;}return answer;}
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
투포인터 boj3273문제 질문
안녕하세요! 투포인터 두 수의 합 문제에서 질문이 있습니다.a[l]+a[r] == x일 경우에는 l을 움직이면 다음 값이 x보다 더 커지니까 r을 움직여줘야한다고 강의에서 말씀하셨는데요, 주어진 수열이 1245 일 경우, l을 오른쪽으로 움직이면 a[l]+a[r]이 7이 돼서 x보다 더 커지긴 하지만, 다음번 반복에서 어차피 if(a[l]+a[r]>x) r--; 인 경우에 걸려서 r이 왼쪽으로 움직이고, 결국 그 다음번에 합이 6이 되는 것은 마찬가지 아닌가요?즉 r을 먼저 움직이고 값이 작아졌다가 다시 l을 움직여서 커지느냐 or l을 먼저 움직이고 값이 커졌다가 다시 r을 움직여서 작아지느냐의 차이라고 생각했는데 혹시 l이 아닌 r을 움직여주어야하는 이유가 무엇인지 궁금합니다! 아래 코드는 l을 움직여 주었을 때의 코드입니다 ㅎㅎhttp://boj.kr/92677f37be23452c8c4b9ca54f86dc58
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-R 질문있습니다 :)
안녕하세요 선생님 🙂 문제관련해서 궁금한 점이 하나있어서 질문드립니다. 문제의 조건에서 -1이 입력되었다면, 해당 노드는 root노드라고 나와있습니다. 하지만, 예제 입력을 보면 root노드를 제외한 노드들은 다양한 값들로 입력이 되었더라구요. 문제에서도 별다른 언급이 없었고, 선생님의 풀이를 봤을 때도 숫자가 -1이 아니면 의미하는 바가 없는 것 같은데요, 제가 이해한게 맞을까요?
-
미해결자바 코딩테스트 - it 대기업 유제
"비밀번호" 문제 확인 부탁드립니다!
안녕하세요! 비밀번호 문제를 다음과 같이 풀었는데 확인 한번 부탁드려도될까요~?class Solution { public int solution(int[] keypad, String password) { int answer = 0; char[] pw = password.toCharArray(); int[] index = new int[pw.length]; for (int i = 0; i < 9; i++) { for (int j = 0; j < pw.length; j++) { if (pw[j] - '0' == keypad[i]) { index[j] = i; } } } for (int i = 0; i < index.length - 1; i++) { int curr = index[i]; if (curr == index[i + 1]) { continue; } if (curr % 3 == 0) { // left if (index[i + 1] - curr == -3 || index[i + 1] - curr == -2 || index[i + 1] - curr == 1 || index[i + 1] - curr == 3 || index[i + 1] - curr == 4) { answer++; } else { answer += 2; } } else if (curr % 3 == 1) { // center if (index[i + 1] - curr >= -4 && index[i + 1] - curr <= 4) { answer++; } else { answer += 2; } } else if (curr % 3 == 2) { // right if (index[i + 1] - curr == -4 || index[i + 1] - curr == -3 || index[i + 1] - curr == -1 || index[i + 1] - curr == 2 || index[i + 1] - curr == 3) { answer++; } else { answer += 2; } } } return answer; } public static void main(String[] args) { Solution T = new Solution(); System.out.println(T.solution(new int[]{2, 5, 3, 7, 1, 6, 4, 9, 8}, "7596218")); System.out.println(T.solution(new int[]{1, 5, 7, 3, 2, 8, 9, 4, 6}, "63855526592")); System.out.println(T.solution(new int[]{2, 9, 3, 7, 8, 6, 4, 5, 1}, "323254677")); System.out.println(T.solution(new int[]{1, 6, 7, 3, 8, 9, 4, 5, 2}, "3337772122")); } }0 1 23 4 56 7 8패스워드의 각 문자에 대해 인덱스 번호를 구한 뒤 왼쪽, 가운데, 오른쪽임에 따라 다음 값과의 차이를 비교하여 +1인지 +2인지 구분하는 형태로 코드를 작성해봤습니다. 강사님이 풀이해주신 방식과는 다소 차이가 있어보여서 어떤 방식이 괜찮은지 혹은 위 방식에 문제점이 있는지 궁금하여 질문 올려봅니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D INF로 fire_check를 초기화해야 하는 이유
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 큰돌님 강의 잘 듣고 있습니다. 다름이 아니라 큰돌님이 fire_check배열을 INF로 초기화해줘야 하는 이유가 불이 아것도 없을 때 때문이라고 하셨는데 그불이 없는 위치는 지훈이가 갈 수 있는거 아닌가요?왜 INF로 초기화를 해줘야 하는 지 잘 이해가 가지 않습니다ㅠㅠㅜ 전체적인 예시를 통해서 설명해주실 수 있을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-C 왜 오류가 났는지 모르겠습니다 ㅠㅠ
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하십니까 강의 재밌게 잘 듣고 있습니다.최대한 저의 힘으로 풀어보고 강사님의 풀이방법을 보고 더 발전시키려고 노력하고있습니다.저의 접근 방법은1. 차가 들어오는 제일 빠른시간, 차가 나가는 제일 늦은 시간을 for문의 범위로 잡았습니다.2. 그리고 for문 안에 변수 cnt를 만들고 i가 차량들의 시간 안에 있으면 cnt++를 해서 한 시간마다 가격을 더해주는 방식을 했습니다.좁은 식견으로인해 제가 어느 부분에서 놓친게 있는지 도저히 알지를 못하겠어서 질문 올립니다.링크: http://boj.kr/d13e7471e6f54ce88888460bf1ed9c0f
-
미해결김영한의 실전 자바 - 중급 2편
ObejctBox 질문
안녕하세요.ObjectBox를 활용하여 int와 String을 받는 과정에서 중복은 해결하였으나 잘못된 타입을 넣을 경우에 대한 예시 들었던 부분에서 질문입니다.integerBox.set("문자100"); Integer result = (Integer)integerBox.get();이 부분에서 문의드릴게 실제 컴파일을 하기 전까지는 ide에서 에러라고 인식을 못하던데 왜 그런걸까요 ? get()을 통해 리턴되는게 object 타입이어도 실제 객체가 Integer 객체가 아니면 저렇게 (Integer)로 캐스트 하는 것 부터가 문제가 되야 할 거 같아서요. 감사합니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
영상보기전 풀어봤습니다.
const solve = (str) => { let answer = '' let count = 1; for (let i = 0; i < str.length; i ++) { if (str[i] === str[i + 1]) { count ++; } else { answer += count !== 1 ? `${str[i]}${count}` : `${str[i]}` count = 1; } } return answer }대략적인 내용은 비슷한거 같습니다.
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
17611번 자바
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] x = new int[1000001]; int[] y = new int[1000001]; // 첫 번째 꼭짓점 int firstW = sc.nextInt() + 500000; int prevH = sc.nextInt() + 500000; int prevW = firstW; // 나머지 꼭짓점 for (int i = 1; i < n; i++) { int w = sc.nextInt() + 500000; int h = sc.nextInt() + 500000; if (prevW == w) { // 수직선 y[Math.min(prevH, h)]++; y[Math.max(prevH, h)]--; } else { // 수평선 x[Math.min(prevW, w)]++; x[Math.max(prevW, w)]--; } prevW = w; prevH = h; } // 마지막 꼭짓점과 첫 번째 꼭짓점 연결 if (prevW == firstW) { // 수직선 y[Math.min(prevH, firstW)]++; y[Math.max(prevH, firstW)]--; } else { // 수평선 x[Math.min(prevW, firstW)]++; x[Math.max(prevW, firstW)]--; } // 큰 값 찾기 int xMax = 0; int yMax = 0; for (int i = 1; i < 1000001; i++) { x[i] += x[i - 1]; // 이전 값이랑 누적합 y[i] += y[i - 1]; xMax = Math.max(x[i], xMax); // 큰 값 비교 yMax = Math.max(y[i], yMax); } System.out.println(Math.max(xMax, yMax)); } }안녕하세요 17611번 문제 자바로 풀고있습니다.백준 게시판과 인터넷에 공유된 풀이가 거의 없어 커뮤니티에 질문 올리게 되었습니다. 문제에서 주어진 예를 테스트 했을 때는 잘 작동하는데, 제출시에(40%쯤) '틀렸습니다' 라고 나옵니다. 해당 코드로는 작동하지 않는 반례 또는 식의 오류를 알려주세요. 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
해당 문제를 제대로 이해한게 맞을까요?
안녕하세요. 문제의 요지를 제대로 파악한게 맞을지 해서 질문 남깁니다. 곱셈한 수가 커지는 것을 방지하고 모듈러 연산을 통해 나머지를 구하는 문제인가요?
-
미해결비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
숙제 최소힙 만들기
class Heap { arr = []; #reheapUp(index) { if (index > 0) { const parentIndex = Math.floor((index - 1) / 2); if (this.arr[index] > this.arr[parentIndex]) { // 값 바꾸기 const tmp = this.arr[index]; this.arr[index] = this.arr[parentIndex]; this.arr[parentIndex] = tmp; this.#reheapUp(parentIndex); } } } #reheapDown(index) { if (index > 0) { const parentIndex = Math.floor((index - 1) / 2); if (this.arr[index] < this.arr[parentIndex]) { const tmp = this.arr[index]; this.arr[index] = this.arr[parentIndex]; this.arr[parentIndex] = tmp; this.#reheapDown(parentIndex); } } } insert(value) { const index = this.arr.length; this.arr[index] = value; // 마지막에 값을 넣어준다. this.#reheapUp(index); } insertDown(value) { const index = this.arr.length; this.arr[index] = value; this.#reheapDown(index); } remove() { // root만 remove } search(value) { for (let i = 0; i < this.arr.length; i++) { if (arr[i] === value) { return i; } } } } const heap = new Heap(); heap.insert(8); heap.insert(19); heap.insert(23); heap.insert(32); heap.insert(45); heap.insert(56); heap.insert(78); const downHeap = new Heap(); downHeap.insertDown(78); downHeap.insertDown(56); downHeap.insertDown(45); downHeap.insertDown(32); downHeap.insertDown(23); downHeap.insertDown(19); downHeap.insertDown(8); console.log(downHeap.arr);reheapDown 이라는걸 만들어서 최소힙 만들기를 해보았는데 부모 index의 값과 비교하는 조건문의 부등호 방향만 바꾸니까 되는데 이게 맞나요...?
-
해결됨김영한의 실전 자바 - 중급 2편
문제와풀이1 문제2번 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.for (int i = 0; i < numbers.size(); i++) { System.out.print(numbers.get(i)); if(i<numbers.size()-1){ System.out.print(", "); } }i < number.size()-1 쪽이 제대로 이해가 안되는거같아서 질문합니다.정수 입력을 1,2,3 입력했으면 numbers.size() = 3i값 = 0 , numbers.size =3i값 = 1 , numbers.size = 3마지막 반복인 i값 = 2 , numbers.size = 3 을 할때는2<3-1 은 맞지않으니 마지막 3뒤에 " , " 출력안됨제가 이해한게 맞을까요 ?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
공부방법에 대한 질문!
공부방법에 대한 질문!안녕하십니까 큰돌선생님!어떻게 공부를 해야 하는지 헷갈려서 이렇게 질문을 남기게 되었습니다.강의에서 말씀해주신 방법대로, 직접 타이핑 하면서 교안을 숙지 중인데, 중간중간 0주차 개념강의도 참고하면서 함께 공부중입니다.제가 궁금한 점은, 이번주에 교안을 1회독 하고, 0주차 강의를 다 듣게 되면, 다음주부터 1주차 강의를 시작으로 쭉쭉 진행하면 되는지? 궁금합니다.!!
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
Number를 써서 풀어봐도 될까요?
return Number(str.replace(/[^0-9]/g,''));이렇게만 작성했습니다.
-
해결됨김영한의 실전 자바 - 중급 2편
list.sort() vs Collections.sort()
강의 내용중 Comparable, Comparator 파트에서 List 데이터를 정렬할 때 Collections.sort() 와 list.sort() 중 list.sort를 권장하는 이유를 조금 더 자세히 알고 싶습니다.이 부분에서 list.sort()를 사용하는 게 더 객체지향적인 코드라고 말씀해주셨는데 List 인터페이스에 정의된 sort() 메서드를 사용하는 게 Collections class 에 정의된 static 메서드보다 어떤 측면에서 더 객체지향적인지 느낌은 오는데 이것 때문이다 라고 정리가 잘 안돼서 질문 드립니다. Collections 의 코드를 봤을 때 내부에서 Collections.sort(list, comparator)를 보게되면 list.sort(comparator) 메서드를 사용하고 있는데 그러면 굳이 Collections.sort()를 사용해야 할 케이스가 따로 있어서 정의한 것인지 어떤 경우에 사용하는지 궁금합니다. public static <T> void sort(List<T> list, Comparator<? super T> c) { list.sort(c); }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
139p 우선순위큐 커스텀 정렬
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요139p 우선순위큐 커스텀 정렬을 넣을 때 반대로 넣어야 하는 특징이있다고 적혀있습니다. 뭔가 큐의 성질과 관련이 있을 것 같은데 자세한 원리를 알고 싶습니다. 반대로, 우선순위 큐가 아닐 때에는 어떤 원리인지도 궁금합니다. 감사합니다