안녕하세요. 좋은 강의 감사합니다! a와 b의 최대 공약수 시간 복잡도에 대해 질문이 있는데요. 약수를 구하는 시간 복잡도가 O(√n)이고, 최대 공약수를 구하기 위해서는 a, b 각각의 약수를 구하는 연산이 들어가기 때문에 최소 O(√a + √b)가 될 텐데 어떻게 O(√max(a, b))가 나오게 되는지 궁금합니다.
현재 섹션 5의 3번째 영상을 보고 있습니다. category = models.ForeignKey( Category, on_delete=models.CASCADE, db_constraint=False, ) 위 코드에서 카테고리에 왜 db_constraint=False, 를 설정하였는지 이해가 잘 되지 않아 설정 용도에 대해 알고 싶습니다. default=null을 한다면, 카테고리 외래키 없이 product 데이터를 생성할 목적인걸 알겠는데, 없는 상황에서 어떤 이유에 사용하신 것인지 알고 싶습니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 컬렉션 프레임워크9에서 문제와풀이2의 문제6번에 대해 여쭤봅니다. memberMap이라는 해시맵에서 첫번째 매개변수로 member.getId 가 들어가고 두번째 매개변수로 member클래스가 들어가는데 첫번째 매개변수가 member클래스의 멤버변수이어야 하는 이유가 있을까요? 문제를 풀던 중에 아직은 잘 모르겠지만 member클래스의 멤버변수 두개를 memberMap이라는 해시맵에 두개를 지정해도 될거같기도 한데(제 극히 초보인 관점에서 본 추측일 뿐입니다.그렇게 풀어볼 능력까진 없어서요.) 굳이 두번째에 클래스를 넣으시고 첫번째에 클래스의 멤버변수 하나를 넣으신 이유가 궁금합니다. 제 짧은 시각으로 보면 중복 같아 보여서요 질문6번의 의도가 파악이 안 돼서 궁금하여 여쭤봅니다.
1 from statsmodels.formula.api import ols from statsmodels.stats.anova import anova_lm model = ols('토마토수 ~ C(종자) * C(비료)', data=df).fit() anova_lm(model) 2 import statsmodels.api as sm from statsmodels.formula.api import ols model = ols('토마토수 ~C(종자)*C(비)', data=df).fit() anava_table=sm.stats.anova_lm(model) print(anava_table) 1 과 2를 보면 from statsmodels.formula.api import ols 는 같고 import statsmodels.api as sm과 from statsmodels.stats.anova import anova_lm이 다른데요.. 구글링해보고 고민해봐도 모르겠어요. 결과값은 같은데..무슨차이일까요?
SPP Layer의 경우 여러 Spatial Bins를 사용하여 이미지의 작은 부분부터 큰 부분까지의 정보를 취합하는 것으로 이해했습니다. 또한 ROI Pooling Layer의 경우 SPP Layer에서 Level이 1인 Bins만 적용하는 것으로 이해했습니다. 여기서 의문이 드는 것이 여러 정보를 종합적으로 취합한 SPP Layer가 ROI Pooling Layer보다 성능이 뛰어날 것으로 (직관적으로) 생각이 드는데, Fast RCNN에서 ROI Pooling을 선택한 이유가 궁금합니다. 실험적인 결과로 ROI Pooling을 선택했겠지만, ROI Pooling이 SPP Layer보다 Object Detection에서 우수한 성능을 보이는 이유가 궁금합니다!
"1-6. [응용] 폴더에 있는 한글 파일을 모두 열기" 관련입니다. 일단 일코님의 설명대로 한 두 번 그대로 성공하고 나면, 강의 내용이 잘 이해가 됩니다. 하지만 초반에는 저 같은 왕초보의 경우 그대로 결과가 나타나지 않거나 실습 조건이 동일하게 마련되지 않으면 헤매게 됩니다. ■ 개선의견 1 이 강의에서는 1.hwp ~ 100.hwp 파일이 들어 있는 "반복작업" 폴더가 있다고 가정하고 실습을 진행하는데요. 물론, 1.hwp 파일을 다운로드 가능하게 되어 있지만.. 1.hwp ~ 100.hwp 파일을 다 만들어 내는 것이 선행되어야 그대로 실습이 가능한데, 그 파일을 만드는 것은 강의 초반이 아니라 후반에 배치되어 있습니다. 제 의견은, 1.hwp ~ 100.hwp 파일을 만들어 내는 부분을 앞에 배치하고, 설명에서는 "이 코드는 아직 안배운 내용이 포함 되므로, 이대로 실습해서 1.hwp ~ 100.hwp 를 만드는 게 부담스러운 학습자는 이 부분을 SKIP하고 진행하세요."라고 한다던가, 아울러, "만약 SKIP하고 진행하실 분들은 1.hwp ~ 100.hwp 파일이 들어 있는 압축파일(zip)을 다운로드 받아서 진행하시면 됩니다."라고 안내하면서, 해당 압축파일의 다운로드도 제공해 주시는 게 어떨까 합니다. ■ 개선의견 2 또 하나는, 작업 디렉토리의 강제 설정을 위한 코드 예시도 추가로 설명에 넣어 주셔도 좋을 거 같습니다. os.chdir(r"C:\Users\user\Desktop\반복작업") 파이참으로 실습 시 작업 디렉토리는 '반복작업' 폴더가 아닌 경우가 대부분으로 왕초보는 요걸로 또 막힐 수 있습니다. ■ 마치는 글 이미 잘 만들어 주신 강의이지만 왕초보의 더 매끄러운 이해를 위한 제안을 드리는 것이니, 꼭 반영하지는 않으셔도 되지만.. 왕초보는 이런 어려움도 있구나.. 정도로 이해해 주시면 감사하겠습니다. 간단한 것도 실행되면 큰 즐거움을 느끼면서 틈틈이 강의 따라하고 있습니다. 감사합니다.
강의를 보고 기존 프로젝트에 작성하지 않았던 테스트 코드를 작성하면서 공부하고 있습니다. 도메인 모듈같은 경우 어떠한 의존성도 가지고 있지 않은 POJO 형태로 코드를 작성해서 단위 테스트로 검증할 수 있었습니다. Crawling 모듈의 경우 Jsoup이라는 라이브러리를 사용하여 특정 URL의 HTML을 불러오고, 해당 HTML에서 필요한 정보를 추출하는 코드를 가지고 있습니다. 이때, 전체적으로 Mock을 사용하여 테스트를 진행하고자 하였는데 라이브러리의 특성 때문에 stubbing을 작성하는데 불편함을 느꼈습니다. 그래서 HTML을 임의로 만들고, HTML을 불러오는 메서드만 stubbing을 적용하려고 하는게 더 효율적이지 않을까 라는 생각이 들었습니다. 외부 라이브러리를 사용하는 코드에서 테스트 작성이 미숙한 것 같아서 어떤 방향이 더 좋을지 질문드리고 싶습니다. 아래 두 코드는 동일한 테스트를 진행하고 있는 코드가 아닌점 참고바랍니다. @Mock private lateinit var webPageLoader: WebPageLoader<Document> @InjectMocks private lateinit var dietParser: DietParser fun parse() { // given val mockDocument = mock(Document::class.java) val mockRows = Elements() val row1 = mock(Element::class.java) val row2 = mock(Element::class.java) val row3 = mock(Element::class.java) mockRows.add(row1) mockRows.add(row2) mockRows.add(row3) val columns1 = Elements( mock(Element::class.java).apply { given(text()).willReturn("2024.10.23") }, mock(Element::class.java), mock(Element::class.java), mock(Element::class.java).apply { given(text()).willReturn("Menu 1, Menu 2") } ) val columns2 = Elements( mock(Element::class.java).apply { given(text()).willReturn("교직원식당") } ) val columns3 = Elements( mock(Element::class.java).apply { given(text()).willReturn("2024.10.24") }, mock(Element::class.java), mock(Element::class.java), mock(Element::class.java).apply { given(text()).willReturn("Menu 3, Menu 4") } ) given(webPageLoader.getHTML(anyString())).willReturn(mockDocument) given(mockDocument.select(anyString())).willReturn(mockRows) given(row1.select(anyString())).willReturn(columns1) given(row2.select(anyString())).willReturn(columns2) given(row3.select(anyString())).willReturn(columns3) // when val result = dietParser.parse() // then assertThat(result).hasSize(2) .extracting("date", "menus") .containsExactly( tuple(LocalDate.of(2024, 10, 23), listOf("Menu 1", "Menu 2")), tuple(LocalDate.of(2024, 10, 24), listOf("Menu 3", "Menu 4")), ) } @Mock private lateinit var webPageLoader: WebPageLoader<Document> @InjectMocks private lateinit var parser: DepartmentNoticeParser fun parse() { // given val html = """ <table class="board-table"> <tbody> <tr> <td class="td-num">2</td> <td class="td-subject"><a href="javascript:fnView('2','url','title','2')">공지 제목 2</a></td> <td class="td-write">작성자 2</td> <td class="td-date">2024.10.02</td> </tr> <tr> <td class="td-num">1</td> <td class="td-subject"><a href="javascript:fnView('1','url','title','1')">공지 제목 1</a></td> <td class="td-write">작성자 1</td> <td class="td-date">2024.10.01</td> </tr> </tbody> </table> """.trimIndent() val document: Document = Jsoup.parse(html) given(webPageLoader.getHTML(anyString())).willReturn(document) parser.initialize(Major.COMPUTER_SOFTWARE_ENGINEERING) // when val notices = parser.parse() // then assertThat(notices).hasSize(2) .extracting("number", "title", "author", "date", "url") .containsExactlyInAnyOrder( tuple( 2, "공지 제목 2", "작성자 2", LocalDate.of(2024, 10, 2), "https://www.dongyang.ac.kr/combBbs/2/url/2/view.do?layout=unknown" ), tuple( 1, "공지 제목 1", "작성자 1", LocalDate.of(2024, 10, 1), "https://www.dongyang.ac.kr/combBbs/1/url/1/view.do?layout=unknown" ), ) }
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
반복문과 다양한 데이터 구조 활용2에서 58번 문제 질문 있습니다. 이렇게 작성해도 되나요? data = {'environment': ['환경','x'], 'company': ['회사','o'], 'government': ['정부, 정치','x'], 'face': ['얼굴','x']} eng = input("영어 단어를 입력하세요 : ") for item in data.keys() : if eng == item and data[item][1] == 'x' : data[item][1] = 'o' if data[item][1] == 'x' : print(item)
안녕하세요. 데이터 전처리 단계에서 target = train.pop('target') 타겟 처리하는 방법과 검증 데이터 분리 단계에서 이렇게 하는 방법 중에 어떤방법을 선택하던 결과에 영향이 없나요? 그리고 데이터 전처리 시에 target분리할 경우에 target 데이터가 수치형이나 범주형 상관 없이 데이터 전처리 전에 분리하면 되는건지요?
1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요?예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 객체와 같이 참조형 타입의 변수를 메서드의 매개인자로 넘기게 되면 값이 "복사"되어 넘어가는 것 이라고 이해했습니다. 그럴경우, 다음의 코드를 실행 했을 때 출력되는 결과는 "abcd" 입니다. 참조 값도 마찬가지로 "복사"를 통해 넘기기 때문에 가능한 부분일까요? public static void main (String[] args) { String str = "abcd" ; changeStr (str); System. out .println(str); } public static void changeStr (String str) { str = new String( "new String!" ); }
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요! 먼저 유사한 질문이 있었는지 검색해 보세요. 서로 예의를 지키며 존중하는 문화를 만들어가요. 강의에서 테스트 given절에서 팩토리 메서드를 통한 객체 생성은 어떠한 의도가 들어갈 수 있으므로 지양하라고 하셨습니다. 관련하여 질문이 있습니다. 예를 들어 다음과 같은 팩토리 메서드가 있다고 하면, public class Coffee { private String type; private int size; public Coffee(String type, int size) { this.type = type; this.size = size; } } public class SeasonalCoffeeFactory { public static Coffee createCoffee(String season) { switch (season.toLowerCase()) { case "summer": return new Coffee("Iced Coffee", 50); case "winter": return new Coffee("Hot Coffee", 30); case "spring": return new Coffee("Latte", 40); case "fall": return new Coffee("Pumpkin Spice Latte", 45); default: throw new IllegalArgumentException("Unknown season: " + season); } } } 여름 시즌 커피에 대한 테스트 코드는 다음과 같을 겁니다. @Test public void testCreateSummerCoffee() { Coffee coffee = SeasonalCoffeeFactory.createCoffee("summer"); assertEquals("Iced Coffee", coffee.getType()); assertEquals(50, coffee.getSize()); } 이때 테스트 코드는 시즌에 맞는 커피 메뉴를 given절에 생성한 후 타입 일치여부만 판단하면 됩니다. 하지만 이 부분을 팩토리 메서드로 작성하지 않게되면 커피를 생성함에 있어 if ("summer".equalsIgnoreCase(season)) { coffee = new Coffee("Iced Coffee", 50); } else if... 와 같은 부분이 테스트 코드의 given절에 들어가야하지 않나 싶습니다. 물론 이런 부분에 대해서 if라는 논리구조가 들어갔으니 한번 더 테스트 코드 메서드가 분리되어야하는건가 싶기도 한데 확신이 잘 안 서서 질문 드리고 싶습니다. 긴 글 읽어주셔서 감사합니다.
if timeMin is not None: if isinstance(timeMin, str): timeMin = datetime.strptime(timeMin, "%Y-%m-%d") timeMin -= timedelta(hours=9) url += f"&timeMin={timeMin.isoformat("T")}Z" 마지막 줄을 실행하면 원래 쌍따옴표 내 쌍따옴표라서 오류가 떠야 하는데, 영상에서는 오류가 없습니다. 반면 제 환경에서는 예상대로 오류가 발생했고, 혹시 몰라 강사님 코드 원본을 실행해 봐도 같은 오류가 발생했습니다. 오류 해결법이 아니라, 왜 영상에서는 해당 오류가 발생하지 않는지 궁금합니다!
TestBeanPostProcessor 가 BeanPostProcessor인터페이스를 implements했고 BeanPostProcessor에 정의되어있는 메서드들을 오버라이딩 안하면 자동으로 오류가 뜨면서 오버라이딩 해라고 경고가 떠야 정상 아닌가요? 강사님 강의에서도 제 컴퓨터에서도 따로 오류가 뜨지 않아서 궁금해서 질문 남깁니다.
default-init-method와 , default-destroy-method를 bean태그 안이 아니고 beans 태그 안에 넣으셨는데, 이렇게 하면 default-destroy-method나 default-init-method를 bean 태그 안에 안 넣으면 자동으로 실행을 해주는 거잖아요. 그럼 만약에 TestBean2 클래스안에 default_init, default_destroy와 똑같은 이름의 메서드가 없으면 실행 안하는걸로 이해했는데 맞나요? 그리고 id가 t1인 bean태그에 init-method, destroy-method를 안썼다면 beans태그에 작성해놓은 default 속성들이 실행이 될텐데 똑같은 이름의 메서드가 있으면 id-t1인 bean 객체에도 default 속성에 지정해놓은 메서드가 실행되는건가요?