학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 여기에 질문 내용을 남겨주세요. 혹시 강의 교재는 어디에서 다운로드 할 수 있을까요?
실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
안녕하세요. 38강의 N + 1 문제를 해결하기 위한 fetch join 문제 해결과 관련해서 제가 발견(?)한 것을 질문드리고자 합니다! 수업 내용 중 N + 1 문제를 querydsl을 사용해서 해결하는 것을 보여주셨는데요. 코드가 다음과 같았습니다. class UserRepositoryCustomImpl( private val queryFactory: JPAQueryFactory ) : UserRepositoryCustom { override fun findAllWithHistories(): List<User> { return queryFactory .select(user) .distinct() .from(user) .leftJoin(userLoanHistory).on(userLoanHistory.user.id.eq(user.id)).fetchJoin() .fetch() } } 그러고 테스트를 돌렸을 때 쿼리가 찍히는 걸 보면 다음과 같습니다. N + 1 문제가 아직 발생하고 있는 것 같습니다. 조금 이상해서 구글링을 해보니 querydsl에서 on 절을 사용하면 두 엔티티가 연관관계라는 것을 인식하지 못 한다고 하네요! 그래서 코드를 다음과 같이 좀 바꿔봤습니다. class UserRepositoryCustomImpl( private val queryFactory: JPAQueryFactory ) : UserRepositoryCustom { override fun findAllWithHistories(): List<User> { return queryFactory .select(user) .distinct() .from(user) .leftJoin(user.userLoanHistories, userLoanHistory).fetchJoin() .fetch() } } 이렇게 바꾸고 쿼리를 찍히는 것을 확인하니까 한 번에 fetch join 되면서 가져오는 것 같습니다! 한 번 확인해주시면 감사하겠습니다!
@GetMapping("/basic-objects") public String basicObjects(HttpSession session) { ... } 위 컨트롤러 작성하는 부분입니다. 관련된 html 파일은 basic-objects.html 인데, ${#session} 으로 세션을 꺼내고 ${session} 으로도 세션을 꺼내네요. 컨트롤러에서 파라미터로 호출하면 자동으로 모델에 담아서 뷰단으로 넘겨주기 때문에 기본으로 제공하는 #session 과 파라미터로 호출한 session 둘다 꺼낼 수 있는걸로 보입니다. 그런데 강의문서에 "스프링 부트 3.0 이상이라면 다음과 같이 작성하자." 라고 써있고 컨트롤러에서 HttpServletRequest.. 리퀘스트와 리스폰스 그리고 서블릿 컨테이너를 Model 에 addAttribute 로 넣어 뷰단에 넘겨줍니다. // 스프링 부트 3.0 이상 @GetMapping("/basic-objects") public String basicObjects(Model model, HttpServletRequest request, HttpServletResponse response, HttpSession session) { session.setAttribute("sessionData", "Hello Session"); model.addAttribute("request", request); model.addAttribute("response", response); model.addAttribute("servletContext", request.getServletContext()); return "basic/basic-objects"; } 리퀘스트와 리스폰스는 컨트롤러 메서드에서 파라미터로 호출했으니 Model 에 넣어서 넘겨줄 필요 없는거 아닌가요?
현재 CMake CLI 사용법 강의 수강 중입니다. 4분 12초부터 나오는 Cmake 명령어를 입력해서 빌드하는 부분에서 막히고 있습니다. 1.입력한 명령어 moonhyung@DESKTOP-Q9M8J51:/mnt/c/ClionProjects/Practice-cmake.git/hello-cmake$ cmake -B build . 2.에러 메세지 CMake Deprecation Warning at CMakeLists.txt:2 (cmake_minimum_required): Compatibility with CMake < 3.5 will be removed from a future version of CMake. Update the VERSION argument <min> value or use a ...<max> suffix to tell CMake that the project does not need compatibility with older versions. CMake Error: CMake was unable to find a build program corresponding to "Unix Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool. CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage -- Configuring incomplete, errors occurred! 3.원인으로 예상하는 부분 & 확인한 부분 - C컴파일러를 Cmake가 찾지 못해서 발생하는 에러라고 생각해서 아래 사항들을 확인해 보았습니다. 3-1) gcc 컴파일러 버전 확인 & Cmake 버전 Gcc 컴파일러 버전 Cmake 버전 3-2)환경변수 경로 확인 및 추가 CC=/usr/bin/gcc CXX=/usr/bin/g++
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 3 - J 주난의 난 문제를 다음과 같은 방법으로 풀었습니다 2차원 arr 에 입력을 저장하고 상하좌우 bfs 로 탐색을 진행하면서 만약 '1' 이 나올 경우 이를 q2에 저장 만약 '0' 이 나올 경우 계속 bfs 탐색을 진행하고 목표에 도달하지 못하고 탐색을 다 마친경우 q2 에 저장된 '1' 을 전부 '0' 으로 바꿔주고 BFS 탐색을 다시 처음부터 진행 위의 같은 방법으로 진행하였는데 큰돌의 해설을 보니 '0' 이 아닌 경우 '0' 으로 바로 바꾸고 탐색을 마친 후 temp 큐에 있던 좌표를 기반으로 다시 탐색을 진행하게 되는데 저는 '1' 을 마주친 경우 바로 바꾸지 않고 나중에 바꾸고 탐색을 처음부터 다시 진행 큰돌님의 코드는 '1' 을 마주친 경우 바로 바꾸고 탐색을 이어서 진행 으로 해석할 수 있는 걸까요?? 코드의 로직은 동일하나 변경 시점과 탐색 시점이 다른 거다 라고 보면 될까요?? 큐를 2개 써야된다는 큰돌님의 조언만 듣고 바로 문제를 풀어서 정답을 맞았지만 정확히 이해가 됐는지 확인하고자 질문드립니다!! 제 전체 코드는 https://www.acmicpc.net/source/66428450 입니다! 그리고 저는 BFS 를 처음부터 탐색하여 visited 를 계속 초기화 해주었는데 fill(&visited[0][0], &visited[0][0] + N * M, 0); 으로 문제에서 주어지는 N 과 M 크기 만큼만 초기화 하려고 하니 무한루프를 벗어나지 못하는 일이 생겨 fill(&visited[0][0], &visited[0][0] + 301 * 301, 0); 결국 visited 배열의 크기 만큼 초기화를 하는 것으로 바꾸니 정상 동작하였습니다! 저는 처음 코드가 사용한 만큼의 영역에 대해서만 초기화 한다고 생각했지만 그렇지 않은 걸까요??
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 93: invalid start byte 거의 끝까지 다 작성하고 runserver 동작시키는데 갑자기 안되는데 왜이런걸까요?ㅠㅠ 잘되다가 갑자기 안되네요ㅠㅠ
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
(1)인자로 받은 dest값이 예제처럼 비워져 있는게 아니라 이미 문자 데이터가 채워져 있는 상황이고, (2)dest에 채워져 있는 문자의 길이가 복사하려는 src의 길이보다 더 길다면, 해당 함수로 원하는 결과를 얻지 못하게 될 것 같다는 생각이 들었습니다. 함수가 호출되었을 때 인자로 받은 dest를 초기화하려면 어떻게 처리하는 방법이 있을 수 있을까요? dest의 공간에 모두 0문자를 입력해버리는 건 그다지 좋은 방법이 아닐 것 같아 질문 남겨봅니다.
from collections import deque N = int(input()) N_list = list(map(int, input().split())) dq = deque(N_list) current = 0 res = "" left = dq.popleft() right = dq.pop() while len(dq) >= 0: if current > left and current > right: break if len(dq) == 0: if current < left and current < right: if left < right: res = res + 'L' # current = left break elif left > right: res = res + 'R' # current = right break elif left > current > right: res = res + 'L' # current = left break elif right > current > left: res = res + 'R' # current = right break else: if current < left and current < right: if left < right: res = res + 'L' current = left left = dq.popleft() elif left > right: res = res + 'R' current = right right = dq.pop() elif left > current > right: res = res + 'L' current = left left = dq.popleft() elif right > current > left: res = res + 'R' current = right right = dq.pop() print(len(res)) print(res) deque 이용하여 pop(), popleft() 로 left, right 설정하여 분기하면서 찾았는데 실제 코딩테스트에서 이러한 코드도 시간 초과 문제가 발생하지 않을 지 궁금합니다. 강사님 풀이의 경우 while 문 안에 sort()가 계속 돌아가서 시간 이 더 오래 걸릴거 같다고 생각해서 질문드립니다!