void dfs(int x, int y) { if (board[x][y]==2||board[x][y]==0) return; if (x < 0 || y < 0 || x >= n || y >= m) return; board[x][y] = 2; dfs(x + 1, y); dfs(x, y + 1); dfs(x - 1, y); dfs(x, y - 1); return; } 안녕하세요 선생님 혹시 강의 내용에 종화 문제에서 이렇게 구현하는 것 또한 dfs라고 할 수 있는걸까요?? 제 코드가 앞으로 문제 풀기에 있어서 더 복잡해 보이는건지 감이 잡히지 않아서 질문드립니다.
안녕하세요. 강의 잘보고 있습니다. 현재 저는 게시글, 댓글 기능을 구현하고 있습니다. 타임리프 + 스프링부트로 구현하고 있는데, 게시글 상세를 눌렀을때 어떤 방식으로 댓글을 가져오는 것이 효율적인지가 궁금합니다. 게시글 상세 요청 -> 페이지 응답 -> 응답받은 페이지에서 ajax로 다시 서버에 댓글 페이지 요청 게시글 상세 요청 -> 댓글이랑 상세페이지 한꺼번에 타임리프로 렌더링해서 페이지 응답 (즉, 항상 게시글 상세와 댓글을 함께 랜더링함) 게시글 상세 요청 -> 첫 댓글 페이지랑 게시글 상세페이지 한꺼번에 타임리프로 렌더링해서 페이지 응답 -> 두번째 댓글페이지부터는 ajax로 응답 혹은 다른 방법이 있다면 알려주세요 !!
안녕하세요 강의 완강후 오랜만에 질문드립니다! 그동안 클린코드, sql, oop, cs등을 공부해보고 강의도 다시 복습중입니다. 다름이 아니라 구현능력에 대한 질문입니다. 강의코드를 이해하거나 복붙, 수정해서 api를 구현하는 것은 가능한데, 백지상태에서 구현하라고 하면 머리가 하얘집니다… 아직 부족하다고 생각돼서 회사에 지원은 안해봤는데 막상 과제테스트를 하게되면 정말 막막할 것 같네요..(어떤 회사들은 과제테스트 할 때 라이브러리를 사용하지 않고 구현해야된다고 하더군요) 새로운 api를 구현하려고 하면 일단 강의코드를 참고해서 복붙 ,수정 작업을 반복하는데 이게 맞나하는 생각이 드네요. 그래서 코드를 한줄 한줄 따라 치면서 이해하고 외우는 방법으로 구현능력을 키워보려 하는데 괜찮은 방법일까요? 아니면 그냥 코드를 참고하더라도 무작정 구현을 많이 해보는게 좋을까요? 그리고 코파일럿을 쓰고있는데 굉장히 편리하긴 하지만 구현능력을 키우려면 쓰지 않는게 좋겠죠? 독학으로 하다보니 여러 생각이 많아지는 것 같습니다. 조언 부탁드릴게요!
강사님 좋은 강의 감사합니다. 정확하게 이해를 하지 못해서 질문을 남겨봅니다. cpu에서 실행 단위가 쓰레드라고 말씀해주셨는데 cpu가 쓰레드를 하나씩 대기 큐에서 코어가 감당할수 있는 쓰레드만큼 꺼내서 실행하고 다음 쓰레드를 실행한다고 이해를 했습니다. 멀티 태스킹은 하나의 os안에 여러 프로세스가 실행이 가능하게 한다는 의미로 이해를 했는데 그러면 프로세스 A 안에 있는 쓰레드 A-1, A-2,A-3이 있고 프로세스 B안에 있는 쓰레드 B-1,B-2,B-3가 있다면 대기큐에 [ A-1,A-2,A-3,B-1,B-2,B-3 ] 있다고 할때 CPU 코어가 3개라면 A-1,A-2,A-3 쓰레드를 꺼내서 실행하고 빠르게 B-1,B-2,B-3를 꺼내서 실행하는걸 반복하다보니 사용자 입장에서는 A,B 프로세스 둘 다 같이 동작하느거처럼 느낀다고 보는걸까요?
안녕하세요, doublylinkedlist 에서 insertAt 수정 중에 if(newNode.next == null){ //새로 삽입한 노드가 마지막 노드라면 this.tail = newNode; } 이 부분은 index == this.count 일 때 데이터를 삽입하는 경우에만 해당되는 것 같은데, else if문 밖으로 빼서 공통적으로 처리해주는 이유가 궁금합니다. 감사합니다!
안녕하세요! 카일님. 주말이나 휴일에 틈틈이 카일님 강의 수강 중입니다 ㅎㅎ 강의 내용이 알찬 게 많아서 도움이 정말 많이 되네요 ㅎㅎ Foodie Express의 새 기능 로그 설계 파트에서 궁금증이 생겨 댓글을 남기게 되었는데요, CTR과 CVR을 메인 지표로 로그설계를 하고, 차후에 해당 지표들을 분석할 때, CTR의 경우는 '높다', '낮다'를 어떻게 판단하나요? CVR의 경우는, 이전 결제 전환율을 비교해보면 좋을 것 같은데, CTR의 경우 이전에 없던 기능이다 보니, 클릭율이 5%라고 하면, 그게 높은 건지 낮은 건지 그 기준을 어떻게 판단하시는 지 궁금합니다. 편하실 때 답 달아주세요!:) 감사합니다.
알고리즘 문제 푸는데 질문이 있어서 질문 드립니다.ㅠ 우선 진짜 기초적인 질문이라.. 어이없을 수도 있지만 궁금해서 여쭈어보아요 두 번째 코드 줄에서 let sum을 통해 sum을 0으로 변수로 지정해줘야하는 이유가 궁금합니다! 그리고 function함수를 사용하면 return함수를 필수적으로 사용해야지만 값이 반환되는걸까요? 미리 감사합니다..ㅠ
안녕하십니까 큰돌님 복습하다가 궁금한게 생겼습니다 안전영역 최대값을 구하기 위해 ret 을 1로 초기화하는데 3중 반복문의 첫 번째 for문이 무조건 1부터 100까지 돌면서 잠기지 않는 지역이 있을 수 있어도(이때, 최소값은 1) 영역 높이가 최대 100이고 반복문 d값이 100까지 가면 결국 마지막에 100 이하의 높이인 영역은 잠기므로 무조건 최소값은 0 으로 되는 거 아닌가요 ?? 그래서 ret 을 0으로 초기화 해야 된다고 생각하는데 뭔가 어렵네요ㅜ
안녕하세요 강사님 ㅎㅎ 맞은 코드 : http://boj.kr/1b7e6a102d7a4a3893e9e95d35517735 틀린 코드 (메모리 초과) : http://boj.kr/8e21367e52314b8585922b74a0fabad8 둘의 차이는 재귀함수의 기저사례만 다릅니다. 하지만 둘의 차이가 왜 메모리 초과를 발생시키는지는 잘 이해가 가지 않아서 질문드립니다 !
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 트랜잭션 매니저 관련 강의를 듣고 있는데요 예를 들어 private final PlatformTransactionManager transactionManager; 이렇게 해서 트랜잭션 매니저를 주입받는다고 했는데 이 클래스가 빈으로 등록된것도 아닌데 어떻게 주입받는건가요??
안녕하세요 변수 선언하는데 있어서 main위에 선언하는 것과 main안에서 선언하는게 무슨 차이가 있나요?? int n, m, num[15001], cnt; 해당 부분을 main 안에서 선언한 경우 틀렸다고 나오고, main위에다가 선언해야 맞았다고 나오는데, 그 차이를 이해하기 어려워서요! 확인부탁드립니다. http://boj.kr/0068cf0a6ca54091a5b44ac723c2ff4d
SpinLock 에 사용되는 특의 함수, atomic 키워드와 compare_exchange_strong() 메소드를 쓰면서 구현을 하는 과정에 대해서 들었는데, 의문점이 void Add(), Sud() 메소드에 순서상의 lock_guard() 를 먼저 실행하면 되지 않을까 생각합니다. thread1, thread2 두 개의 쓰레드가 하나의 locked 부울 데이터를 공유한 상태에서 동시에 lock _guard() 를 할 수 있는 경우에서 locked 부울을 동시 접근하는 경우도 있겟지만, => 이러면 deadlock 이 발생하겠죠. 같은 말로, thread t1(Add); thread t2(Add); 같은 경우도 위에 deadlock 발생하는 같은 이치라고 보시면 될꺼 같습니다. 결국에는 locked 부울 데이터를 공통적으로 사용한다는 부분에서 생기는 문제니까요. 즉, thread 1 또는 thread 2 가 동시적으로 접근하지 않는 이상 deadlock 은 발생하지는 않을 것이며, add 메소드에서 lock _guard() 를 했기에, 모든 작업을 다 끝내고 그 다음 add() 메소드를 실행하지 않을까 하고 생각합니다. 하지만 main 에서 Add(), Sub() 를 순차적으로 실행했기에 Add() 에 먼저 thread1, thread2 가 동시에 수행을 한다해도 결국에는 Add() 메소드에서 lock_guard 를 둘 중 하나가 먼저 수행하기 때문에 Add() 메소드를 먼저 접하는 thread 가 수행을 하고, 그 뒤의 Sub() 메소드 또한 실행을 하지만, 이 또한 thread 1 또는 thread 2 둘 중 하나가 lock_guard() 를 하고 있는 상태이기 때문에 다른 스레드가 _locked 부울에 접근을 하지 못하는 이유로 deadlock 이 발생하지 않고 원하는 값이 출력되지 않을까 생각했고, 실제로도 0 값이 나오기는 했습니다. 좀 더 정확하게는, 멀티스레드가 순차적으로 수행하지 않고 동시 다발적으로 실행이 된다면 종류는 아마, 1. A thread Add() 실행 B thread Sub() 실행 2. B thread Sub() 실행 A thread Add() 실행 3. A, B thread Add(), Sub() 동시 실행 같은 경우의 수가 더 있을 수도 있지만 현재는 여기 까지 밖에 볼 수 없었습니다. 만약 main() 함수에서 3번 경우에서 두 메소드에서 동시 다발적으로 처리를 수행한다면 deadlock 이 테스트를 하면서 운이 좋게 안 뜬걸로 볼 수있지만, 순차적으로 Add() -> Sub() 식이라면, 즉 1번 경우라면 SpinLock 을 처음 방식처럼 구현하는 상태에서, lock_guard() 메소드를 순서를 바꿔서 처리하는 방법도 옳은 방법으로도 되는지 알고 싶습니다. int32 sum; class SpinLock { public: void lock(){ while (_locked){ } _locked = true; } void unlock() { _locked = false; } private: bool _locked = false; }; void Add() { lock_guard<SpinLock> guard(spinLock); for (int32 i = 0; i < 10'000; ++i) { sum++; } } void Sub() { lock_guard<SpinLock> guard(spinLock); for (int32 i = 0; i < 10'000; ++i) { sum--; } } void main() { thread t1(Add); thread t2(Sub); t1.join(); t2.join(); cout << sum << endl; } .. 생략