묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
2강 정수로 문제3번
안녕하세요21분쯤에 176은 16으로 나누어 떨어지는건 이해했습니다.그런데 n의 제곱수로 나누어지는 약수를 찾아 모두더하라는 의미가176의 약수중에서 2의 제곱수로 나누어지는 애들을 찾아서 더하라는 이야기인데 176의 약수중 2, 4, 8, 16으로 나누어 떨어지니까 얘들을 더해야 하는 게 아닌가요?계속 생각해봐도 도저히 이해가 안돼서 남깁니다.
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
c++로 Data Asset을 로드 했으면 Cook에 폴더 지정해야한다 라고 이해했는데요.
숄더랑 쿼터 data asset 있는 폴더는 Additional Asset Directories to Cook에 추가 안 하나요???
-
미해결Slack 클론 코딩[실시간 채팅 with React]
onScroll 스크롤 위치 유지가 안됩니다 ㅠ
import Chat from '@components/Chat'; import { ChatZone, Section, StickyHeader } from '@components/ChatList/style'; import { IChat, IDM } from '@typings/db'; import React, { FC, RefObject, VFC, forwardRef, useCallback, useRef } from 'react'; import { Scrollbars } from 'react-custom-scrollbars'; interface Props { scrollRef: RefObject<Scrollbars>; chatSections: { [key: string]: IDM[] }; setSize: (f: (index: number) => number) => Promise<IDM[][] | undefined>; isEmpty: boolean; isReachingEnd: boolean; } const ChatList: VFC<Props> = (({ chatSections, setSize, isEmpty, scrollRef, isReachingEnd}) => { const onScroll = useCallback((values) => { // 끝에 도달하면 불러오지 않기 if(values.scrollTop === 0 && !isReachingEnd){ console.log('가장 위'); setSize((prevSize) => prevSize + 1).then(()=>{ // 스크롤 위치 유지 if(scrollRef?.current){ scrollRef.current?.scrollTop(scrollRef.current?.getScrollHeight() - values.scrollHeight); } }); } }, []); return ( <ChatZone> <Scrollbars autoHide ref={scrollRef} onScrollFrame={onScroll}> {Object.entries(chatSections).map(([date, chats]) => { return ( <Section className={`section-${date}`} key={date}> <StickyHeader> <button>{date}</button> </StickyHeader> {chats.map((chat) => ( <Chat key={chat.id} data={chat} /> ))} </Section> ); })} </Scrollbars> </ChatZone> ); }); export default ChatList; 이쪽 코드는 문제가 없는것같은데 희한하게 위치가 유지가 되지않고 원래처럼 쭉 올라가버립니다.. ref쪽이 문제인가요..? 혹시몰라 DirectMessage 컴포넌트도 아래에 첨부하겠습니다.import React, { useCallback, useEffect, useRef } from 'react'; import gravator from 'gravatar'; import useSWR, { mutate } from 'swr'; // swr 인피니티스크롤링 전용 메서드 import useSWRInfinite from 'swr/infinite'; import { IDM, IUser } from '@typings/db'; import fetcher from '@utils/fetcher'; import { useParams } from 'react-router'; import ChatBox from '@components/ChatBox'; import { Container, Header } from '@pages/DirectMessage/style'; import ChatList from '@components/ChatList'; import useInput from '@hooks/useInput'; import axios from 'axios'; import makeSection from '@utils/makeSection'; import Scrollbars from 'react-custom-scrollbars'; const DirectMessage = () => { const { workspace, id } = useParams<{ workspace: string; id: string }>(); const { data: userData } = useSWR(`http://localhost:3095/api/workspaces/${workspace}/users/${id}`, fetcher); // 내정보 const { data: myData } = useSWR(`http://localhost:3095/api/users`, fetcher); const [chat, onChangeChat, setChat] = useInput(''); // 과거 채팅리스트에서 채팅을 치면 최신목록으로 바로 스크롤을 내려줄려면 ref를 // 이 컴포넌트에서 props로 내려줘야하기 때문에 forwardRef를 사용해서 props로 넘겨준다 // 💡 HTML 엘리먼트가 아닌 React 컴포넌트에서 ref prop을 사용하려면 React에서 제공하는 forwardRef()라는 함수를 사용해야 합니다 const scrollbarRef = useRef<Scrollbars>(null); // 채팅 받아오는곳 (setSize : 페이지수를 바꿔줌) // useSWRInfinite를 쓰면 [{id:1},{id:2},{id:3},{id:4}] 1차원배열이 [[{id:1},{id:2}],[{id:3},{id:4}]] 2차원배열이 된다. const { data: chatData, mutate: mutateChat, setSize, } = useSWRInfinite<IDM[]>( (index) => `http://localhost:3095/api/workspaces/${workspace}/dms/${id}/chats?perPage=20&page=${index + 1}`, fetcher, ); // 데이터 40 개중에 20개씩 사져오면 첫번째페이지부터 20 + 20 + 0 세번째 페이지 0 이되면 isEmpty, isReachingEnd는 true가 됨 // 반대의 상황에서 데이터가 45개면 20 + 20 + 5 isEmpty는 0이 아니라서 false isReachingEnd는 여전히 데이터 가져옴 const isEmpty = chatData?.[0]?.length === 0; const isReachingEnd = isEmpty || (chatData && chatData[chatData.length - 1]?.length < 20) || false; const onSubmitForm = useCallback( (e) => { e.preventDefault(); if (chat?.trim() && chatData) { const savedChat = chat; // 💡 옵티미스틱 UI // 서버쪽에 다녀오지 않아도 성공해서 데이터가 있는거처럼 보이게 미리 만듦 mutateChat((prevChatData) => { // infinite 스크롤링은 2차원 배열이다. prevChatData?.[0].unshift({ // unshift : 앞쪽에 추가 id: (chatData[0][0]?.id || 0) + 1, content: savedChat, SenderId: myData.id, Sender: myData, ReceiverId: userData.id, Receiver: userData, createdAt : new Date(), }); return prevChatData; },false) // 옵티미스틱 UI 할땐 이부분이 항상 false .then(()=>{ setChat(''); // 버튼클릭 시 기존 채팅지우기 scrollbarRef.current?.scrollToBottom(); // 채팅 첬을때 맨 아래로 }) axios .post( `http://localhost:3095/api/workspaces/${workspace}/dms/${id}/chats`, { content: chat, }, { withCredentials: true, }, ) .then(() => { mutateChat(); // SWR에서 데이터를 다시 불러와서 캐시를 갱신하는 역할을 합니다. }) .catch(() => { console.error; }); } }, [chat, chatData, myData, userData, workspace, id], ); // (채팅이 최신것을 아래에 두기 위함) = 기존것 데이터를두고 새 데이터를 뒤집어서 출력 / flat() 배열을 1차원 배열로 만들어줌 const chatSections = makeSection(chatData ? [...chatData].flat().reverse() : []); // 로딩 시 스크롤바 제일 아래로 useEffect(()=>{ if(chatData?.length === 1){ // 채팅 데이터가 있어서 불러온 경우 scrollbarRef.current?.scrollToBottom(); // 가장 아래쪽으로 내려줌 } },[chatData]) // 로딩 if (!userData || !myData) { return null; } return ( <Container> <Header> <img src={gravator.url(userData.email, { s: '24px', d: 'retro' })} alt={userData.nickname}></img> <span>{userData.nickname}</span> </Header> {/* 컴포넌트 위치를 미리 지정해도 좋다. */} {/* 전역 상태관리 라이브러리를 사용해도 컴포넌트상황에따라 props 로 넘겨줌*/} <ChatList scrollRef={scrollbarRef} chatSections={chatSections} setSize={setSize} isEmpty={isEmpty} isReachingEnd={isReachingEnd} /> <ChatBox chat={chat} onChangeChat={onChangeChat} onSubmitForm={onSubmitForm} /> </Container> ); }; export default DirectMessage;
-
해결됨개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제
[페이지 교체 알고리즘]
[페이지 교체 알고리즘]페이지 교체와 프레임 할당 강의 중 16:15부분에서 궁금한 점이 해결되지 않아 질문드립니다.최적 페이지 교체 알고리즘이, "앞으로 오랫동안 사용되지 않을 페이지를 예측하는 것이 어렵기 때문에 구현하기 힘들다" 라고 설명해 주셨는데, 페이지 참조열을 통해 판단할 수 있지 않나요?예를들어 현재 페이지 참조열이 [2 2 2 3 5 5 5 3 3 3 7] 이라고 가정했을때, 특정 시점 아무때나를 기준으로 사용되지 않는 페이지를 예측하는것이 가능하다고 생각합니다.이 부분에 대해서 부연 설명을 부탁드립니다.감사합니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
f1, MAE 등...
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요먼저 유사한 질문이 있었는지 검색해보세요시험이 처음인지라 질문드려봐요! 😋 필기에 나왔던 개념들이지만.. 실기에서 해보려니까 기억이 안나는데요..ㅎㅎ 시험장에서는 f1, MAE 등 평가 지표들을 어떻게 구하는지 식이 나와있나요..? 암기해가야할까요..?
-
해결됨풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
section 7 포트? 오류
안녕하세요 섹션 7 dockerfile 에서, 웹브라우저 주소 창에 IP주소:9999 를 입력해도 EC2 서버가 열리지 않아서 질문드립니다. 보안그룹에 들어가보니, 이렇게 되어있는데 맞는 설정인가요? 인터넷에 보니, 1. aws 가입2. ec2 인스턴스 생성 및 탄력적 ip와 연결 (ubuntu free tier로 생성) 3. 인바운드 규칙 80(기본) 포트번호 추가(0.0.0.0)3. 보안그룹 인바운드 규칙에 포트번호 9999 추가 (사용자 지정 TCP) 이렇게 되어있는데, 저기 아레 규칙 추가 를 클릭하고 사용자 지정 TCP를 선택해서 포트번호 9999 라고 추가를 해줘야 하는건가요? (강의에 이 부분이 따로 안나와있어서요 )
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
궁금증
제가 초기에 jar로 설정하면 jsp가 안ㄴ먹힌다고 들었는데, 지금까지 jsp가 잘 되는데 왜 그런걸까요?
-
미해결
파이썬 다운로드 오류
이렇게 화면이 뜰때는 머가 잘못된건가요?
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
200이나 201인데 body에 데이터가 없어도 되는지
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]204 No Content 응답 페이로드에 보낼 데이터가 없다는 말을 보고 궁금한 점이 생겼습니다. 질문1)200이나 201은 응답 메시지 body에 데이터를 넣는데,200이나 201인데도 body에 데이터가 없어도 되나요? 데이터가 없으면 꼭 204여야 하나요? 질문2)그리고 웹 문서 편집기에서 save를 누르는 상황에 204를 안 쓰고 200 혹은 201을 써도 되는지도 궁금합니다. 이 경우엔 201은 될 것 같기도 한데, 200은 안 되려나요? save를 하면 리소스를 등록(?)하는 거니깐 201이 적합한가요?
-
해결됨ProtoPie Master Courses (프로토파이 마스터 클래스)
디비이스 센서 활용 질문
안녕하세요 선생님! 유익한 강의 잘 듣고 있어요.그런데 교재_sound 2를 공부하면서 궁금한 점이 생겨 질문드려요.선생님은 데시벨 측정 인터랙션을 만드실 때, 이렇게 만드셨는데Sound 트리거rotate 리스폰스: 바늘 지정레인지 1 (40 ~ 80dB : 337 ~ 23angle)Chain 트리거: 바늘, rotate 값 지정Assign: db(변수) 지정레인지 1(337~360 : 0~50)레인지 2(0 ~ 23 : 50~100)Detect 트리거: 바늘, rotate 값 지정 Text 리스폰스: format(db, "###") + "db" Sound 트리거 안에, Assign을 넣으면 안되는 걸까요?따로 Chain 트리거를 만들고 Assign을 추가하는 이유가 궁금해요. Sound 트리거Rotate 리스폰스: 바늘 지정레인지 1 (40 ~ 80dB : 337 ~ 23angle)Assign: db(변수) 지정레인지 1 (40~80 db : 0~100 value) Detect 트리거 : db(변수) 지정Text 리스폰스: format(db, "###") + "db" 정리하자면...Sound 트리거에서, Assign으로 dB값을 변수에 넣지않고 체인을 쓰는 이유가 무엇인지 궁금해요.(두 방법 사이에 차이를 잘 모르겠어요 🥲)Detect도 데시벨 값을 받아서 텍스트로 나타내라는 것인줄 알았는데, 로테이션 값을 쓰는 이유가궁금해요.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2에 Member 테이블이 생성되지 않아요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이렇게 컴파일 할 때 테이블이 실행되는 줄이 강의처럼 출력되지 않고 h2 에도 실제로 만들어지지 않아요.
-
해결됨한 입 크기로 잘라먹는 타입스크립트(TypeScript)
void 타입 질문 드립니다
안녕하세요 강사님 !리액트 강의 듣고 너무 좋아서 타입스크립트 까지 공부하고 있습니다 !!void 타입 관련하여 궁금한 사항이 있어서 질문 드립니다. 제가 알기로는 void 타입은 반환 값이 없을 때 사용하는 타입으로 알고 있습니다.(현재 5.1 버전부터는 함수의 반환 값이 없을 때 자동으로 undefined가 반환되니, undefined 타입을 반환 값으로 넣어줘도 문제가 없다고 알고 있습니다.) 아래와 같이 반환 값이 void 타입으로 설정하면 반환 값이 있으면 에러가 나야 맞는거 같은데, 반환 값으로 전달 받은 매개변수를 던져줘도 에러가 발생하지 않고 msg가 반환되는데 이게 어떻게 가능한걸까요..?제가 잘못 이해하거나 잘못 작성한게 있는걸까요?? const hello: (msg: string) => void = (msg) => { return msg }; const h1 = hello('테스트'); console.log(h1); // '테스트'
-
해결됨AWS Certified Solutions Architect - Associate 자격증 준비하기
수강 기한 연장 문의 드립니다.
안녕하세요 강사님 ! 좋은 강의 잘 듣고 있습니다!혹시 강의 기한 연장을 할 수 없을까요?연말이라 회사일이 너무 바빠서 다 듣지 못했습니다 ㅠㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-A_19942 인덱스 질문
http://boj.kr/40440de5cbbb48f59125df1e7e30c453질문 3개가 있습니다.1.모든 경우의 수를 찾는 아래의 코드에서 i=0이 아닌 1부터 시작하는 이유는 식재료를 아무것도 고르지 않는 경우의 수는 없기 때문인가요?(최소 1개 이상 식재료를 골라야 하기 때문인가요?) 그러면 그냥 0부터 시작해도 어차피 결과에 영향을 주지는 않으니 그냥 0부터 시작해도 문제는 없겠죠?for (int i=1; i< (1<<n); i++) map은 key-value 쌍으로 알고 있습니다. 그렇다면 아래 코드에서 ret_v의 형태는 (key, value)쌍 으로 (최소 ret 비용, {{1,2,3}, {2,4,5}})이런식으로 들어가 있는건가요? map<int, vector<vector<int>>> ret_v;...if(b>=mp && c>=mf && d>=ms && e>=mv){ if(ret>=sum){ ret=sum; ret_v[ret].push_back(v) 3.처음에 key를 생성할때 insert로 집어 넣어야하는걸로 알고 있는데 그러면 ret_v[ret].push_back(v)말고 ret_v.insert({ret, {v});이런식으로 넣어도 될까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
th:field 태그에 대해서
th:field="*{itemName}" 이 태그의 *{itemName}" 은ValidationItemControllerV2 클래스에있는bindingResult.addError(new FieldError("itm", "itemName","상품 이름은 필수 입니다"));이 코드의 "itemName"과 매핑되는게 맞을까요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
train data와 test데이터 분리할때 트레인데이터의 쉐입을 이용한다는 말과 라인을 사용한다는 뜻이 뭐에요
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요먼저 유사한 질문이 있었는지 검색해보세요
-
해결됨실무자가 알려주는 CANoe (For CAN 통신)
네트워크 인터페이스 장비
섹션2까지 수강한 상태입니다.실습을 해보고 싶은데 네트워크 인터페이스 장비를 구매해서 사용하기는 너무 고가인데요. 대체 가능한 것이 있을까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
수업을 듣다보니 제가 잘 이해한게 맞는지 궁금해서...
이렇게 이해해도 괜찮을까요?
-
미해결
자바스크립트가 적용이 안되요.
[HTML] <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="style/style.css"> <link rel="stylesheet" href="https://use.typekit.net/frx5mqp.css"> <title>Weather</title> </head> <body class="sunny"> <section class="poster background sunny" style="background: linear-gradient(90deg, rgba(224, 224, 224, 0.72) -7.6%, #D9D9D9 27.12%, rgba(226, 226, 226, 0.96) 32.55%, rgba(255, 255, 255, 0.82) 49.92%, rgba(191, 191, 191, 0.62) 79.46%, rgba(223, 223, 223, 0.31) 104.34%, rgba(190, 190, 190, 0.00) 113.67%);"> <div class="sun-circle"> <div class="sunny-sun"> <svg width="528" height="519" viewBox="0 0 528 519" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M286.829 287.338L439.324 453.847M76.8288 55.338L229.324 221.847M301.967 256.151L527.749 254.527M48.4299 427.536L225.204 287.069M300.43 225.536L477.204 85.0692M256.485 292.987L260.015 518.747M1 253.527L226.784 254.864M254.485 1L256.879 226.775" stroke="#BE0505" stroke-width="5"/> </svg> </div> </div> </section> <section class="title"> <h1>맑음</h1> <h2>Sunny</h2> </section> <section class="contents"> <div> <p class="latitude">37°33'58.87"N</p> <p class="longitude">126°58'40.63"E</p> </div> <div class="calendar"> <div class="month">03</div> <div>月</div> <div class="day">10</div> <div>日</div> </div> <div> <p class="location">Gangnam-gu, Seoul</p> <p class="time">14:00 03/10/2023</p> </div> </section> <section class="poster forward"></section> <script src="./js/index.js"></script> </body> </html> document.querySelector(".sun-circle").onclick = function(){ document.querySelector(".sun-circle").style.background="FF0000"; }; 처음에 console.log("document.querySelector(".sun-circle")"); 했을때는 sun circle div요소가 나왔는데,위에 문법을 쓰니깐 적용이 안되고, document is not defined라고 에러 문구가 뜹니다. 찾아보니 node때문에 그렇다는데..무슨말인지 잘 이해가 안되고 왜 적용이 안되는지 모르겠습니다ㅜㅜ vscode써서 작업하는데 라이브 서버로 미리보기 해도 console.log 안에 넣어 실행할때는 되는데. onclick코드 쓰면 미리보기의 console칸에 아무것도 안나와요ㅜㅜ... node js에서 원래 실행이 안되는 거면, node를 지우고 vscode를 실행해야 하나요...? js코드 넣고 실행하면, vscode 에서 아래와 같이 에러메세지가 뜹니다. ReferenceError: document is not defined at Object.<anonymous> (/Users/Downloads/코딩 연습/Example02/js/index.js:1:1) at Module._compile (node:internal/modules/cjs/loader:1376:14) at Module._extensions..js (node:internal/modules/cjs/loader:1435:10) at Module.load (node:internal/modules/cjs/loader:1207:32) at Module._load (node:internal/modules/cjs/loader:1023:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:135:12) at node:internal/main/run_main_module:28:49 Node.js v21.1.0 [Done] exited with code=1 in 0.369 seconds
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
flutter doctor cocoapods 설치 오류
intel mac 유저입니다.강의에서 말씀하신대로 homebrew 통해서 cocoapods 설치 한 후 flutter doctor 실행 하는데 계속 저런 화면이 뜨네요...해결해 보려고 sudo gem install cocoapods 실행하면이런 화면이 뜨구요...해결 방법 알려 주시면 감사하겠습니다....ㅠㅠㅠ