- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강의 열심히 듣고있는중입니다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class Main { public static void main(String[] args) throws IOException { Main T = new Main(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int num = Integer.parseInt(br.readLine()); int[] nums = Stream.of(br.readLine().split(" ")) .mapToInt(Integer::parseInt) .toArray(); // System.out.println(Arrays.toString(T.solution(num, nums))); int[] result = T.solution(num, nums); String output = Arrays.stream(result) .mapToObj(String::valueOf) .collect(Collectors.joining(" ")); System.out.println(output); } private int[] solution(int num, int[] nums) { List<Integer> list = new ArrayList<>(); for (int i : nums) { if (i >= num) { list.add(i); } } return list.stream() .mapToInt(Integer::intValue) .toArray(); } } 위와 같이 풀었는데 IDE에서는 잘 동작하는데 사이트에서 오답으로 처리되는 이유 좀 알수있을까요,, ㅠㅠ
안녕하세요, 여러 번 이해하려 해도 기초가 부족해 쉽게 이해되지 않아 질문을 남깁니다 ㅠㅠ // Member 클래스에서 equals() 오버라이딩 Member m1 = new Member("A"); Member m2 = new Member("A"); // m1.equals(m2) = true HashAndEqualsMain3 수업 중 Member 클래스에서 새로 정의한 equals() 메서드를 통해 참조값이 다른 두 객체 m1.equals(m2) = true 를 알 수 있었습니다. MyHashSetV2 에서 정의한 add() 메서드에서는 중복을 허용하지 않기 위해 LinkedList.contain() 메서드를 사용해서 안에 들어있는 내용의 동등성을 비교하고 있습니다. public boolean add(Object value) { int hashIndex = hashIndex(value); LinkedList<Object> bucket = buckets[hashIndex]; if (bucket.contains(value)) { return false; bucket.add(value); size++; return true; } equals() 를 재정의 하지 않은 MemberOnlyHash 를 이용한 HashAndEqualsMain2 수업에서는 m1 과 m2 가 Objects.equal() 로 다른 참조값을 비교하게 되어 add() 에서 중복을 검증할 수 없었고 MyHashSetV2.add() 를 통과해 같은 인덱스에 중복된 값이 들어가게 되었습니다. HashAndEqualsMain3 수업에서는 equals() 를 재정의한 Member 객체를 쓰고 있는데 m1 을 LinkedList 에 add() 로 추가한 후 m2 를 추가하는 과정에서 LinkedList.contains() 로 중복이 걸러져 m2 는 추가되지 않는것을 확인하게 되었습니다. 질문 : equals() 를 재정의 하며 Member 객체끼리 비교는 가능하게 되었는데 어떻게 Member 에서 재정의한 equals() 가 LinkedList.contains() 의 값에 영향을 줄 수 있는지 궁금합니다. Member 에서만 재정의한 메서드가 이미 LinkedList bucket 에 들어있는 "A" 라는 값과 동등성 검사를 할 때 영향을 끼치는 것 같은데 매개변수의 타입에서 재정의를 하는것이 LinkedList.contains() 에 영향을 미칠 수 있나요? 혹은 영한님이 MyHashSetV2Main2 수업때 언급하신 equals() 사용처에 짧게 나온 아래 코드와 같은 동작 원리일까요? public boolean contains(Object searchValue) { int hashIndex = hashIndex(searchValue); LinkedList<Object> bucket = buckets[hashIndex]; for (Object object : bucket) { if (object.equals(searchValue)) { return true; } } return false; } 이해가 잘 되지 않아 질문도 뒤죽박죽인듯 해 걱정입니다. ㅠㅠ 잘못 이해한 부분이 있다면 따끔한 지적 부탁드립니다. 항상 강의 잘 보고 있습니다!
안녕하세요. HashMap에서 values 메서드는 인터페이스를 반환하는데 Collection 인터페이스를 익명으로 구현 후 반환하나요? 아님 인터페이스 하위에 있는 구현 객체를 생성 후 반환하나요? 아님 크게 중요하지 않는 것인지,, HashMap에서 values 메서드를 보니 아래와 같이 되어 있더라고요. public Collection<V> values() { Collection<V> vs = values; if (vs == null) { vs = new Values(); values = vs; } return vs; } 감사합니다.
안녕하세요. 가장 높은 탑 쌓기 문제에서는 정렬을 해주었는데요! 직전 LIS 문제에서는 정렬을 따로 해주지 않았더라구요. 물론 직전 문제에서 정렬을 한다면 알고리즘을 적용할 이유는 없지만, 굳이 정렬을 안 한 이유를 꼽자면 위치를 바꿀 수 없는 완성된 수열이 입력으로 들어왔다는 가정이기 때문인지 궁금합니다. 읽어주셔서 감사합니다.
선생님 강의 설명 듣고 저 혼자서 구현해봤는데 구현한 방법은 비슷한 것 같은데 채점돌려보니까 마지막 문제가 시간초과가 걸리네요... 어디가 문제인걸까요? 문제에 대한 정답은 제대로 나오네요. #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; }
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
이번 강의 코드와 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); } }
안녕하세요! 투포인터 두 수의 합 문제에서 질문이 있습니다. 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
안녕하세요 선생님 🙂 문제관련해서 궁금한 점이 하나있어서 질문드립니다. 문제의 조건에서 -1이 입력되었다면, 해당 노드는 root노드라고 나와있습니다. 하지만, 예제 입력을 보면 root노드를 제외한 노드들은 다양한 값들로 입력이 되었더라구요. 문제에서도 별다른 언급이 없었고, 선생님의 풀이를 봤을 때도 숫자가 -1이 아니면 의미하는 바가 없는 것 같은데요, 제가 이해한게 맞을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 큰돌님 강의 잘 듣고 있습니다. 다름이 아니라 큰돌님이 fire_check배열을 INF로 초기화해줘야 하는 이유가 불이 아것도 없을 때 때문이라고 하셨는데 그불이 없는 위치는 지훈이가 갈 수 있는거 아닌가요? 왜 INF로 초기화를 해줘야 하는 지 잘 이해가 가지 않습니다ㅠㅠㅜ 전체적인 예시를 통해서 설명해주실 수 있을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하십니까 강의 재밌게 잘 듣고 있습니다. 최대한 저의 힘으로 풀어보고 강사님의 풀이방법을 보고 더 발전시키려고 노력하고있습니다. 저의 접근 방법은 1. 차가 들어오는 제일 빠른시간, 차가 나가는 제일 늦은 시간을 for문의 범위로 잡았습니다. 2. 그리고 for문 안에 변수 cnt를 만들고 i가 차량들의 시간 안에 있으면 cnt++를 해서 한 시간마다 가격을 더해주는 방식을 했습니다. 좁은 식견으로인해 제가 어느 부분에서 놓친게 있는지 도저히 알지를 못하겠어서 질문 올립니다. 링크: http://boj.kr/d13e7471e6f54ce88888460bf1ed9c0f
안녕하세요. ObjectBox를 활용하여 int와 String을 받는 과정에서 중복은 해결하였으나 잘못된 타입을 넣을 경우에 대한 예시 들었던 부분에서 질문입니다. integerBox.set("문자100"); Integer result = (Integer)integerBox.get(); 이 부분에서 문의드릴게 실제 컴파일을 하기 전까지는 ide에서 에러라고 인식을 못하던데 왜 그런걸까요 ? get()을 통해 리턴되는게 object 타입이어도 실제 객체가 Integer 객체가 아니면 저렇게 (Integer)로 캐스트 하는 것 부터가 문제가 되야 할 거 같아서요. 감사합니다.
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%쯤) '틀렸습니다' 라고 나옵니다. 해당 코드로는 작동하지 않는 반례 또는 식의 오류를 알려주세요. 감사합니다.