비트마스킹 생각하기 전에 기본 추론 방식인 완탐 -> DP -> 그리디 순으로 생각을 해볼때 완탐의 경우 20C10 의 복잡도가 어느정돈지 아예 감이 안오더라구요 20! / 10! * 10! 인데 10!은 360만정도로 이해했는데 문제 풀이에 도저히 20!의 감이 안와서 일단 '완탐'으로 가능한지 여부 자체도 파악이 안되더라구요. 어떻게 이럴경우 대략적인 숫자를 확인해볼 수 있을까요
http://boj.kr/367fd4875e384ed7a3c4d8d650155ae6 안녕하세요, 큰돌님. 말씀해주신 대로 벡터에 크기 지정해서 런타임 에러 해결했습니다. 연결성 체크하는 부분은 어떤 방식으로 구현해야 될까요? DFS로 할 수는 있을 것 같은데, 맞는 방향성이 아닌 것 같다는 생각이 듭니다...
안녕하세요 큰돌님 열심히 수강중입니다 ㅎㅎ void go 함수 내부에 for문에서 if(a[ny][nx] && visited[ny][nx] == 0) go(ny,nx); 이렇게 쓰는것과 강의 영상에 나오는 if(a[ny][nx] == 0)continue; if(visited[ny][nx]) continue; 차이점이 있을까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요?예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요, 제네릭 Set 4 부분 강의에서 질문드리고 싶은 점이 있어 여쭤봅니다. private int hashIndex(Object value){ return Math. abs (value.hashCode())%capacity; } 이 부분에서 매개변수가 E value가 아닌 Object 로 들어오는 이유는 타입 이레이저 때문일까요 ?
항상 강의 잘 보고 있습니다 감사합니다 ㅎㅎ 다음은 제가 작성한 코드입니다. https://www.acmicpc.net/source/93982542 제 코드에서 궁금한 점은 다음과 같습니다. 평소 제 코드 스타일과도 연관된 부분인데 주어진 상황에 대해 정직하게 푼다고 해야 할까요..? 특히 완전탐색의 경우, 저는 대부분 '가능한 조건 탐색 -> 해당 조건 적용 -> 결과 확인'의 정해진 순서대로 풀이하는데, 지금까지는 문제가 없었지만 해당 방식이 추후 '색다른 접근을 요구하는 풀이' 등에서는 독이 될까 조금은 걱정됩니다. 크게 신경 쓰지 않아도 될까요? 최소값을 찾았을 때, 이후의 가지치기 대신 exit(0)으로 프로그램을 종료시켜버리는 것이 괜찮을지 궁금합니다. 답변 기다리겠습니다. 감사합니다!
http://boj.kr/089c2c9136d74ad080637a1d940ca88d 안녕하세요, 큰돌님. 비트마스킹이 익숙치 않아서, 우선 재귀로 풀어봤습니다. 풀다가 연결성 체크하는 부분에서 막혔는데, 어떤 방식으로 해야 될까요? DFS로 할 수는 있을 것 같은데, 맞는 방향성이 아닌 것 같다는 생각이 듭니다...
섹션 3 모의면접은 어떤 플랫폼 쓰신거에요? 인터뷰 보실 때 linkedIn이나 지인 통해서 Hiring manager를 먼저 컨택하셨나요? 아니면, career page에서 cold로 지원하셨나요? 지원 시점 부터 phone screening, full-loop 인터뷰 끝날 때까지 시간이 얼마나 걸리셨나요? 좋은 강의 배포해 주셔서 감사합니다!
안녕하세요! 오랜만에 다시 코테를 푸는데 맞왜틀이 나와서 질문 드립니다! #include <iostream> using namespace std; int N, M, J; int l, r, cnt; int main(){ cin >> N >> M >> J; // 초기화 l = 1; r = M; cnt = 0; for (int i = 0; i < J; i++){ int apple; cin >> apple; // 범위 안이라서 움직일 필요 없다. if (apple >= l && apple <= r) continue; // 왼쪽에 가까우면 왼쪽으로 이동 오른쪽에 가까우면 오른쪽으로 이동 int leftLength = abs(l - apple); int rightLength = abs(r - apple); bool isLeft = leftLength < rightLength ? true : false; if (isLeft){ l -= leftLength; r -= leftLength; cnt += leftLength; } else{ l += rightLength; r += rightLength; cnt += rightLength; } } cout << cnt; return 0; } 제가 만든 로직대로라면 절대로 경계값을 벗어날 수가 없습니다. 왜냐하면 문제에서 " 각 사과는 N칸중 한 칸의 상단에서 떨어지기 시작하며" 라고 주어져 있기 때문입니다. 67%에서 틀렸다고 나옵니다..!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 MyheshSetV0에 클래스에서 (밑의 코드는 중략) 이 클래스의 인스턴스 변수인 int[] elementData 배열은 기본형이기에 모두 0으로 초기화 되어지는데 이러한 메인 클래스에서 첫 set.addO(1)이 되는 부분이 이해가 잘 안되네요 ㅜㅜ 결국 기본형 배열에 0으로 초기화가 되어있으니 끝까지 비교가 되어 처음 add 역시 O(n)이 될 것 같아서 Integer 제너릭 타입은 널이 들어가서 for-each문 배열을 안 돌지만 int형은 0으로 n번째만큼 돌지 않을까? 라는 생각을 하고 있습니다 혹시 가르쳐 주실 수 있을까요 (요약문) int[] elementData는 기본형으로 0으로 전부 초기화 contains의 0값을 data에 다 넣어서 == 비교처리가 됨으로 O(n)처리가 되지 않을지 질문( 추후 Integer배열(null 초기화)로 가정하면 될지)
Exchange Problem문제 질문있습니다. 이 문제를 분석하다가 어려워서 질문드립니다. 제가 분석한 결과는 dp를 통해 모든 경우의 수를 구한 것과 그리디를 통해 구한 경우의수를 비교하는 문제 같았습니다. 근데 예시를 보고 어떻게 문제를 접근해야하는지 모르겠습니다. 8 1 5 10 50 100 500 1000 10000 위의 예시처럼 밑의 8개의 단위로 된 동전을 통해서 모든 단위(1원~9999원)의 동전에 대해 그리디가 맞다면 yes이고 아니면 no를 택하는것인가요? 너무 어렵습니다... 혹시 파이썬 답안을 알려주실 수 있으신가요? 아니면 추가적인 강의에 대한 생각이 있으신지도 궁금합니다.
안녕하세요, 선생님. 수업 진도 나가면서 혼자 30분 ~ 1시간 가량 고민해보며 먼저 문제를 풀어보고 그 이후에 강의 풀이를 보면서 복기하는 식으로 공부를 해 나가고 있는데요, 강의 듣던 중에 문제 구성 관련하여 궁금한점이 있어 질문드립니다. 백준 문제를 선별하여 풀이를 해주시는데요, 혹시 백준 문제들은 해당 문제의 퀄리티가 좋고 코딩 테스트에 자주 나오며 그 문제를 완벽히 이해하고 풀었을 때 다른 문제 또한 비슷한 방법으로 접근했을 때 문제 풀이 능력이 향상될것이다 라는 기준으로 선정된 백준 문제들로 선별해주셨을까요?
큰돌님 비트마스킹을 공부하면서 계속해서 드는 생각이라 질문해요. 생각해보면 비트마스킹으로 구현할 수 있는 것들은 재귀함수를 이용한 완전탐색으로 전부 풀 수 있다고 생각해요. 물론 비트마스킹을 이용하면 메모리나 CPU 연산 측면에서 조금 더 빠르긴 하겠지만, 문제를 푸는데 있어서 막 체감이 큰 느낌은 아닌 거 같아요. 그래서 비트마스킹을 문제를 조금 더 다양하게 풀 수 있다 정도로 생각하고 있는데, 이정도로 받아들여도 될까요? 아니면 제가 놓친 부분이 있을까요? 물론 다양하게 생각하는 게 좋은거지만 직접적으로 큰 영향력 있는 이론은 아닌 거 같아서 질문합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. isEmpty() 메서드 관련해서 제네릭은 실행 시점에 타입이 정해지는데 단순 null 인지만 확인하는것이 아닌 기본형,참조형 각각의 타입별로 비어있는지를 구현해야 하지 않나 싶습니다. 아래와 같이 test를 해보면 잘못된 값이 나옵니다. public class ContainerTest { public static void main(String[] args) { Container<Integer> integerContainer = new Container<>(); System.out.println("빈값 확인1: " + integerContainer.isEmpty()); } }
안녕하세요! 정렬 -2 (3-3)과 관련해서 아래처럼 sort를 이용하면 안되는건가요? for문 두번을 이용해서 설명해주신 방법대로 해야하는 것이 맞는지 궁금하고, 아래 방법대로 하면 O(N) 연산량이 되는 것인지도 궁금합니다! 감사합니다. input = [4,6,2,9,1] ###내가 한것### def insertion_sort(array): n = len(array) for i in range(1,n): if array[i]<array[i-1]: a = array[:i+1] a.sort() array[:i+1]=a return array insertion_sort(input)