안녕하십니까 http://boj.kr/ec5eb19fa58d4c81a3b511d53ee8bf34 위 풀이는 제가 푼 코드인데 통과는 했지만 효율적인 코드인지는 판단이 안 되어 이렇게 풀어도 괜찮은지 여쭙고자 질문 남깁니다. 그리고, 배열을 사용할 때 array를 써야할지 vector를 써야할지 감이 안 잡히는 경우가 종종 있는데.. 어떤 기준을 잡고 쓰면 좋을까요?? 좋은 강의 감사드립니다. 답변 기다리겠습니다:)
안녕하세요 😃 큰돌님 저 또한 이 문제의 범위에 대해 궁금증이 생겨 여러 질문글 ( 숨바꼭질2에서 기존 10만대로 잡아져있는 다른 숨바꼭질 문제에 대한 것의 범위가 잘못된것 아닌가요 라는 질문 등) 을 보던 중 질문에 대한 답변 중 최단거리로만 생각하면 안되기에 20만으로 잡아야 한다 라는 답변이 이해가 가지 않아 질문을 드립니다 어떻게 보면 질문도 이해가 가고 답변도 이해가 가고 서로 다 맞는 말씀을 하시는 것 같은데... 관련된 이야기들이 많아서 제 생각을 정리해 보자면 지금까지 이해한 바로는 핵심은 이것입니다 x2로 범위를 탈출하고 -1을 가는 것보다 -1을 먼저하고 x2를 하는 것이 더 나은데 더 넓은 범위까지 잡아줘야 하는가? 예를 들어: 수빈이의 위치가 50,001이고 동생의 위치가 99,999일 때: 50,000 → 100,000 → 99,999 (3단계) 이는 100,002 → 100,001 → 100,000 → 99,999 (4단계)보다 효율적입니다. 이 예시는 항상 범위 내에서 최적의 해법을 찾을 수 있음을 보여줍니다 그렇다면 문제에서 요구하는 정답은 10만 범위 안에서만 이동하는게 나으므로 강의에서 말씀하신 범위를 넘는 경우의 수가 있긴 하나 굳이 갈 이유가 없기에 해당 경우의 수는 제외해도 된다로 저는 이해를 했습니다 30만으로 가도되지만 30만으로 가는 것은 가장 빠른 거리일 수가 없기 때문에 고려하지 않는 것처럼요 따라서 제가 이해한 바로 내린 결론은 배우는 입장에서는 단순히 입력값의 범위가 10만으로 주어져 10만으로만 생각했다가 운좋게 넘어가는 경우가 있을 것이기에 다른 경우의 수를 생각하는 것이 좋으니 해당 포인트를 강조하는게 맞지만 다음으로 깊게 생각을 해본 단계에 이르렀다면 이 문제는 사실 10만이 넘게 잡지 않아도 된다라고 보는게 맞지 않는가? 입니다
안녕하세요, 2-Q 문제 질문있습니다. http://boj.kr/3ce7270b49e1494aa875c3b9a9f48e1c 제가 제출한 코드인데요, 매번 visited배열을 초기화하면 맨 바깥쪽 공기는 중복으로 탐사하는 부분이 싫어서 memset(visited,0,sizeof(visited)); 을 없애고, //녹이기 for(auto k : meltCheese){ questionMap[k.first][k.second]=0; visited[k.first][k.second]=0; } 이렇게 녹이는 부분만 다시 visited배열을 0 으로 만들고 탐색하면 답이 다르게 나오는데 이부분이 왜 그런지 잘 모르겠습니다..!!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. http://boj.kr/53f91af39b4f4ae490e1e0388bffd39a 15%까지 갔다가 double tree or courruption라는 런타임 오류가 뜹니다. 찾아보니까 동적 할당을 잘못 잡거나 초기화를 안 했다는 데, 애초에 동적할당을 하지 않아서,, 무슨 문제일까요? ㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] public int compareTo(Card anotherCard) { // 숫자를 먼저 비교하고, 숫자가 같으면 마크를 비교 if (this.rank != anotherCard.rank) { return Integer.compare (this.rank, anotherCard.rank); } else { return this.suit.compareTo(anotherCard.suit); } } 이 코드에서 priavte으로 선언된 rank와 suit에 anotherCard.getRank() 나 anotherCard.getSuit() 으로 접근하지 않고 anotehrCard.rank 와 anotherCard.suit 로 바로 접근할 수 있는 이유가 뭔가요??
http://boj.kr/2f1777c58bd84f67a180147d9be4011f http://boj.kr/cf9baebc300544628b1b450e16c61985 두 코드의 풀이 방식은 동일한데 처음은 반복문을 사용했고 두번째는 재귀함수를 사용했습니다. 저는 뱀의 머리와 꼬리의 위치 정보를 별도로 저장하고 그 저장된 정보들을 기반으로 종료조건을 걸어서 풀었습니다. 둘 다 지저분하게 풀기는 하였지만 논리적으로는 저 나름 잘 파악해서 코드를 짰다고 생각하고 예제는 다 옳게 잘 나옵니다. 하지만 백준에 제출을 하니 둘 다 "틀렸습니다"라고 뜹니다. 무엇이 문제일까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강의 유익하게 수강하고 있습니다. 다름이 아니라 2주차 탐색 코드를 작성할 때 [y][x] 순서로 하는 것을 기본으로 하겠다 언급하고 넘어가셨고 강의 예제에는 정사각배열을 받아서 의문을 가지지 않고 넘어갔는데 문제를 풀다 보니 처음에 표를 입력 받을 때 가로 세로 받는 순서도 그렇고 표 자체도 그렇고 머리 속에서 자꾸 꼬이는데 [y][x] 순서로 하시는 이유를 알 수 있을까요? 그리고 저 순서로 받을 경우에도 y가 세로 x가 가로로 생각하고 편의를 위해서 순서를 저렇게 받는 거라고 인식하고 있는게 맞을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요! 시간복잡도 관련한 질문입니다. 모든 경우를 생각했을 때 (60,60,60) 에서 계속 (9,3,1)을 빼는게 최악이라 생각했고 이 경우까지 도달하기 위해선 1+6+6^2+..6^60 이라 생각해서 그래프로 풀 생각을 하지 못했습니다. 그런데 강의에선 bfs로 최단거리를 구했더군요. 최악의 경우에 도달하기 전에 0,0,0이 되는 순간이 존재하니 가능한 풀이인가요? 아니면 제가 최단거리 개념에 대해 잘못 알고 있는걸까요? 감사합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 큰돌님 강의 잘 보면서 진행하고 있습니다. 1213번 문제를 먼저 풀고 강의를 확인했습니다. 제가 풀게 된 방식은 조금 다르게 접근한거 같은데 혹시 큰돌님 방식으로 진행을 하는것과 많이 차이가 있는건지 궁금해서 여쭤봅니다. https://www.acmicpc.net/source/88922584
http://boj.kr/4fbcbcb105e542a095e677324f2c5f34 강의를 보기 전에 문제를 풀때에는 누적합을 생각하지 못하고 다른 풀이로 풀어보고 이 로직에서 좀 사로잡힌 상태입니다. 이 방법으로도 풀수 있는 방법을 알 수 있을까요?? sumnum은 sum의 갯수가 픽하는 갯수와 관련이 있어 저렇게 설정했습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요ㅎㅎ 코드 직접 작성해보았는데, 시간 초과가 뜨더라구요.. 테스트케이스는 다 통과했는데 시간초과 이외에 반례도 통과 못하는 코드 일까요? https://www.acmicpc.net/source/share/a545919798ae40c5b0d4ee605056ff3b
안녕하세요! 제가 이해하고 있는 부분이 맞는지 궁금합니다. LinkedList<Integer>[ ] buckets = new LinkedList<>[ ] 를 하면, LinkedList<Integer> 타입을 갖을 수 있는 배열이 생성되고, buckets[0] , buckets[1] .. .. 처럼 인덱스 번호를 이용해서 접근가능합니다. 여기서 궁금한점은 LinkedList<Integer> 타입으로 구성된 각 배열들은 LinkedList<Integer>의 인스턴스가 생성된것이 아니라, 단지 LinkedList<Integer>의 타입을 갖을 수 있는 참조 변수 인건가요?? 그 후에 각 참조변수 안에서 new LinkedList<>의 코드를 사용해서, LinkedList<>의 인스턴스가 생성되어 연결된것인가요?? 그렇기 때문에, add 메소드에서, buckets[1].add와 같은 문장이 생성될 수 있었는지 여쭤보고싶습니다.
안녕하세요 . int 타입의 경우 배열을 생성하였을때 int는 4바이트로 메모리크기가 정해져있고 그에 따라 (배열주소 * int의크기(4)) 로 O(1) 로 찾을 수 있다고 이해했습니다. 그럼 그렇다면 Object [] 배열의 경우에도 동일하게 동작하나여? Object나 다른 참조타입의 경우에도 메모리에서 각각의 인덱스의 참조주소가 동일한 크기를 가지고 배열이 생성될까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요! 섹션 6 -문제와 풀이 2 에 나온 문제를 간략하게 그림으로 도식화해보았습니다. 제가 이해하고 있는게 맞는지 확인 부탁드려도 괜찮을까요? 감사합니다.
아래의 코드는 강사님의 최종 작성 코드를 확인 전, 제가 생각해서 작성한 코드입니다. def find_max_occurred_alphabet(string): alphabet_occurrence_array = [0] * 26 for char in string: if char.isalpha(): arr_index = ord(char) - ord('a') alphabet_occurrence_array[arr_index] += 1 max_num = alphabet_occurrence_array[0] max_alphabet_index = -1 max_occurred_alphabet = 0 for number in alphabet_occurrence_array: max_alphabet_index +=1 if max_num < number: max_num = number max_occurred_alphabet = max_alphabet_index + ord('a') return chr(max_occurred_alphabet) 강사님께서 작성하신 코드와 비교해보니, 확실히 강사님께서 작성하신 코드가 더 심플해보였습니다. 1-6 강의를 듣고 확인해보니, 시간복잡도 측면에서는 강사님께서 작성주신 코드와 차이가 없음을 확인하였습니다. 제 구현 방식에 대해 앞으로 코드를 작성 시, 어떻게 풀이 방향을 잡고 구현을 해야하는지, 현재 코드에서의 개선점에 대해 피드백 주시면 감사드리겠습니다.
안녕하세요, DP 백준 11053문제관련해서 질문이 있습니다. 1) 부분수열중 가장 긴 거라했으니 N = int(input()) lit = list(map(int, input().split())) print(len(sorted(list(set(lit))))) 이렇게 set으로 중복처리를해주고 그 길이를 구하면 안되는건가요? 2) 1) 방법이 틀려 부분수열이 아니라 기존에 input값에서 길이를 구하는걸로 구했을때 하기와 같이 했습니다. N = int(input()) lit = list(map(int, input().split())) dp = [0] * (N+1) for i in range(1, N): dp[i-1] = (lit[i] - lit[i-1]) print(sum([1 for i in dp if i>0])+1) 이전값과 비교하여 양수이면 남기고 남겨진값들로 길이를 구하려했는데 1), 2) 방법에서 둘 다 채점이 틀려서 제가 문제 자체를 이해를 잘못하고 있는지 하여 문의드립니다.