[질문 내용] 여기에 질문 내용을 남겨주세요. public class MemberThis { public String nameField; public void initMember( String nameParameter ) { nameField = nameParameter ; } } 위에서 public void initMember( String nameParameter ) 이 메서드를 선언하는거라고 생각했는데요. 왜 public이랑 void 사이에 static이 없는건가요? 왜 없어도 되는건지 모르겠습니다.
경우의 수 문제에서는 memo[i]가 i번째 계단까지 도달하는 방법의 수를 저장했다. 최소 비용 문제에서는 memo[i]가 i번째 계단까지 도달하는 총 비용을 저장했다. 그렇다면 memo[i]가 이미 최소 비용을 저장하고 있다면, 왜 cost[i]까지 더해야 하나요? memo[i] = min(memo[i-1], memo[i-2]) + cost[i] 계단 오르기 경우의 수 문제가 당신은 계단을 오르고 있습니다. n 꼭대기에 도달하려면 단계가 필요합니다. 매번 당신은 오르 1 거나 2 계단을 오를 수 있습니다. 정상까지 올라갈 수 있는 뚜렷한 방법은 몇 가지입니까? memo[i]=i가 3이라고 한다면 3까지 도달할 수 있는 방법을 저장하는것이고. 계단오르기 최소비용문제에서는 memo[i]=i가 3이라고 한다면 3까지 도달할 수 있는 비용을 저장하는것이라 생각하는데요. 아래는 최소 비용 문제 코드입니다 class Solution(object): def minCostClimbingStairs(self, cost): n = len(cost) if n == 2: return min(cost) # 계단이 두 개라면, 더 싼 비용을 선택 # DP 배열 초기화 memo = {} memo[0] = cost[0] memo[1] = cost[1] # 점화식을 이용하여 최소 비용 계산 for i in range(2, n): memo[i] = min(memo[i-1], memo[i-2]) + cost[i] # 불필요한 비교 제거 # 마지막 계단을 오르지 않아도 되므로, 마지막 두 개 중 최소값 반환 return min(memo[n-1], memo[n-2])
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 강사님 강의 항상 감사하게 보고있습니다 연결리스트의 삭제에서 초기화를 시킨다고 했는데 참조값의 연결의 끊으면 사용되지 않으므로 gc대상이 되니 초기화는 안해도 되지 않나요? 제가 놓친 부분이 있으면 말씀 부탁드리겠습니다 :)
안녕하세요 선생님. wordRelay 강의 잘 수강하였습니다. 강의를 다 수강한 뒤에 복습하고자 수업 진행했던 코드를 처음부터 다시 따라 치던 와중에 끝말잇기 게임 타이틀과 단어 입력창, 확인 버튼 밑에 Spacer를 따로 넣지 않고 List만 넣어도 위치가 원하는대로 위로 올라가는데, 그럼 Spacer는 따로 넣어주지 않아도 되는건가요? Spacer를 넣는 것과는 어떤 차이가 있나요? import SwiftUI struct ContentView: View { let title: String = "끝말잇기 게임" @State var nextWord = "" @State var words: [String] = ["Apple", "Elsa", "Alin"] @State var showAlert: Bool = false var body: some View { VStack { Text(title) .padding(.horizontal, 12) .padding(.vertical, 16) .font(.title) .bold() .background( RoundedRectangle(cornerRadius: 15) .fill(.purple) .opacity(0.3) .shadow(radius: 5) ) .padding(.top, 10) } HStack { TextField("단어를 입력하세요", text: $nextWord) .padding() .background( RoundedRectangle(cornerRadius: 10) .stroke(lineWidth: 2) ) Button(action: { if words.last?.last?.lowercased() == nextWord.first?.lowercased() { words.append(nextWord) nextWord = "" } else { showAlert = true nextWord = "" } }, label: { Text("확인") .foregroundStyle(Color.white) .padding() .background( RoundedRectangle(cornerRadius: 10) ) }) .alert("끝말이 이어지는 단어를 입력하세요", isPresented: $showAlert) { Button("확인", role: .cancel) { showAlert = false } } } .padding(.horizontal) .padding(.top) List { ForEach(words.reversed(), id: \.self) { word in Text(word) .font(.title) } } .listStyle(.plain) // 선생님은 여기에 Spacer()를 넣으셨는데 // 입력하지 않아도 타이틀과 단어 입력창의 위치가 // 위로 올라갑니다 } } #Preview { ContentView() }
@DATASETS.register_module(force=True) class KittyTinyDataset(CustomDataset): # 커스텀 데이터셋에서 사용할 클래스명 저장. CLASSES = ('Car', 'Truck', 'Pedestrian', 'Cyclist') ##### self.data_root: /content/kitti_tiny/ self.ann_file: /content/kitti_tiny/train.txt self.img_prefix: /content/kitti_tiny/training/image_2 #### ann_file: /content/kitti_tiny/train.txt # annotation에 대한 모든 파일명을 가지고 있는 텍스트 파일을 __init__(self, ann_file)로 입력 받고, 이 self.ann_file이 load_annotations()의 인자로 입력 def load_annotations(self, ann_file): print('##### self.data_root:', self.data_root, 'self.ann_file:', self.ann_file, 'self.img_prefix:', self.img_prefix) print('#### ann_file:', ann_file) cat2label = {k:i for i, k in enumerate(self.CLASSES)} image_list = mmcv.list_from_file(self.ann_file) # 포맷 중립 데이터를 담을 list 객체 data_infos = [] datasets = [build_dataset(cfg.data.train)] 클래스 설정 후(위 박스) 아래박스 코드로 데이터셋을 생성하면 load_annotations의 ann_file에 cfg.data.train.ann_file의 값이 자동으로 들어가는 것으로 이해했습니다. 또한 self.ann_file 값으로는 KittyTinyDataset이 상속받은 CustomDataset의 ann_file 값이 들어가는데 이 또한 데이터셋 생성시 CustomDataset에 cfg.data.train.ann_file의 값이 자동으로 들어가는 것으로 이해했습니다. 이 과정이 맞다면 데이터셋 생성시 self.ann_file과 ann_file에 들어가는 값이 동일한데 두가지 방식 모두 사용하는 이유가 궁금합니다. 과정이 틀렸다면 self.ann_file과 ann_file의 값이 언제 어떤 방식으로 할당되는지 궁금합니다.
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 4-9 4주차 끝 & 숙제 설명 어떤 알고리즘을 학습하고 계신가요? 첫번째 문제 (라면공장) 여기까지 이해하신 내용은 무엇인가요? stock이라는 변수에, 날짜가 stock값보다 작은 date일 때의 supplies들 중 최대 값을 얻어서 다시 stock에 += 해주면서 최종적으로 stock이 k보다 커졌을 때 반복을 종료하고 결과값을 return하는 전반적인 알고리즘은 이해하였습니다. 2. 어려움을 겪는 부분 어느 부분에서 막히셨나요? 정답이 4가 나오는 예시 문제 코드의 어떤 로직이 이해가 안 되시나요? while stock <= k : 라는 반복문이 실행될 때 마다 max_heap을 왜 초기화시켜주지 않는 건가요? stock을 업데이트 하기 전에 남아있는 max_heap의 원소들과, stock을 업데이트 한 후에 새로이 추가된 max_heap의 원소들 중에 전자의 경우에서 max값이 나올 수 있기 때문인가요? 어떤 개념이 헷갈리시나요? 3. 시도해보신 내용 문제 해결을 위해 어떤 시도를 해보셨나요? 에러가 발생했다면 어떤 에러인가요? 가장 바깥의 while문에서 벗어나지 못하는 문제 현재 작성하신 코드를 공유해주세요 def get_minimum_count_of_overseas_supply(stock, dates, supplies, k): # 풀어보세요! max_coverd_date = 0 result = 0 remained_stock = stock max_coverd_date += remained_stock while max_coverd_date < k: #k일을 버틸 수 있을 때까진 반복해야 함 can_supplied_qty_list = [] while dates: supply_date = dates[0] if supply_date <= max_coverd_date: dates.pop(0) can_supplied_qty_list.append(supplies.pop(0)*-1) else: break if can_supplied_qty_list: heapq.heapify(can_supplied_qty_list) max_supplied_qty = heapq.heappop(can_supplied_qty_list)*-1 max_coverd_date += max_supplied_qty result += 1 return result 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? => 1-5. 알고리즘과 친해지기 (2) 어떤 알고리즘을 학습하고 계신가요? => 최빈값 구하기 2. 어려움을 겪는 부분 어떤 개념이 헷갈리시나요? => 안녕하세요~ 화면 캡쳐가 안돼서 말로 설명하자면, 강의 마지막 시뮬레이션 영상(25:58)에서 max_alphabet_index가 8이었다가, 13이었다가, 마지막에 14인 채로 끝나는 이유가 뭔가요? 코드 상으로, if문 조건절에 등호를 붙이지 않았기 때문에(`if alphabet_occurrence > max_occurance:`), 동일한 최빈값 중에서는 알파벳 순서가 가장 앞에 위치한 알파벳이 max로 저장된다는 것은 이해했습니다! 그냥 시뮬레이션 영상 자체에 대한 질문이었어요! 근데 쓰다 보니 쓸 데 없는 질문인 것 같긴 하네요 😅 그냥 코드 상으로 이해했다면 넘어가도 괜찮겠죠!?? 감사합니다!!
39:00 쯤에 자체적인 id 가 있다면 엔티티이므로 엔티티의 값을 수정할 수 있다고 말씀하셨는데요. 수정할 수 있다는 데이터는 모든 값타입을 의미하는 건 아니라고 받아드려지는데 맞을까요? 즉, "값타입(자바 기본값(원시, 포장) , 임베디드, 컬렉션) 들 중에 자바 기본값만 수정해도 된다." (임베디드와 컬렉션은 setter메소드를 사용하면 안되니 private나 제거를 해야한다고 권장하셨기 떄문입니다.)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. Postman에서 http://localhost:8080/api/v1/members 를 POST하는 것을 하고 있는데 실행하면 아래와 같이 뜨고 insert into member (city, street, zipcode, name, member_id) values(NULL, NULL, NULL, 'hello', 1) 도 안뜨고 insert문 또한 한줄로 안나타나고 여러줄로 나옵니다...왜 이런걸까요 ?
3-8 해쉬-2 강의 수강 중 출석체크 문제에서 2중 for문, 정렬, hash table 3가지 방식에 대한 시간복잡도를 설명해주셨는데 hash table 시간복잡도에서 값 등록 시 최선이 1 최악이 N인데 최선을 고려한다. 라고 하셨는데 보통 어떤 입력이 들어올지 모르니 최악을 고려해야하는거 아닌가요?
지난번과 동일하게 자꾸, @Observation 을 활용하려다보니 문제가 많이 생기는 것 같습니다. 정확하게 차이를 이해하려고 강의를 돌려봐도 제가 이해하고 있는 바와 다른 점들이 있는 것 같아 질문 드립니다. 강의의 내용은 CoreData 를 다룰 때, fetch 로 불러온 것을 View 로 넘기기위한 변수 var savedEntities: [Fish] 를 만들고, :ObservableObject protocol 을 활용하셨습니다. 이후 View 에서 ViewModel 을 처음 초기화할 때 사용하기 위해서 @Stateobject 를 활용하여 설명을 하셨고요. 그렇다면, Observable Macro 로 Migrating 하기 진행하는데에도 문제가 없다고 생각을 했습니다. 그래서, 아래와 같이 코드를 바꾸어 보았습니다. 그런데 문제는 Viewmodel 에서 정의된 updateFish() method 가 적용되지 않습니다. List 에서 주어진 생선 이름을 tap 했을 경우, "~" 가 추가가 되어야 하는데, func updateFish(fish: Fish){ let currentName = fish.name ?? "" let newName = currentName + "~" fish.name = newName saveData() print("Updating fish name to: \(newName)") } 와 같이 print 를 찍어보았을 때, 디버그 창에서는 print 가 되지만, View 에서는 "~"가 추가되지 않는 모습을 확인할 수 있었습니다. CoreData 의 변화를 감지하지 못하는건지.. 기초강의에서 FruitModel 예시에서는 ObservableObject 대신 Observable Macro 를 적용해도 되었었거든요. 여기서도 fruitArray 이라는 배열을 사용했는데 잘 적용되었습니다. @Observable Macro 를 적용하는데에 있어서 제가 잘못 이해하고 있는 부분이 있을까요? var fruitArray: [FruitModel] 는 View에서 변화를 감지하여 실시간 Update가 가능한 반면 var savedEntities: [Fish] 는 왜 변경되어도 View에서 변화를 감지 하지 못하는지 궁금합니다. 감사합니다.
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 빅분기 실기 작업형 1유형, 2유형, 3유형은 대체 무엇을 묻기 위해 어떤 기준으로 구분한 것인지 그 설명을 듣고 싶습니다. 그래서 무엇을 정리하고 준비해야 하는지에 대한 정리를 실제 작업형 1,2,3유형 문제를 두고 설명해 주시기 바랍니다. 즉, 작업형 문제를 바로 풀기에 앞서 이 문제는 무엇을 묻기 위한 문제로 배경지식으로는 무엇이 필요한 것인지 문제에 출제 문제의 설명(출제 포인트)을 달아 주시기 바랍니다. 빅분기 실기 항목은 데이터수집작업, 전처리작업, 모형구축작업, 모형평가작업이라고 나와 있는데 이것이 각각 작업형 1~3유형에 어디에 해당하는지 설명이 없고, 작업형 1~3유형 또한 데이터수집작업, 전처리작업, 모형구축작업, 모형평가작업 중 어디에 해당하는지 설명이 없습니다. 이러한 내용이 정리되었으면 좋겠습니다. GPT에 물으니 아래와 같은 답변이 나왔는데 맞는지도 검토바랍니다. 빅데이터분석기사 실기 시험에서 작업형 문제는 제1유형, 제2유형, 제3유형 으로 구분됩니다. 각 유형은 문제 해결 방식과 요구되는 기술적 접근법이 다릅니다. 작업형 문제 유형별 특징 작업형 제1유형 (30점, 3문제, 각 10점) 주요 내용 : 데이터 전처리 및 기초적인 데이터 분석 요구되는 기술 : 데이터 정리(결측치 처리, 이상치 제거) 데이터 변환(스케일링, 원-핫 인코딩 등) 간단한 통계 분석(평균, 중위수, 표준편차 등) 예제 : 주어진 데이터셋에서 특정 열의 결측치를 평균값으로 대체하시오. 작업형 제2유형 (40점, 1문제, 가장 배점 높음) 주요 내용 : 머신러닝 모델 구축 및 평가 요구되는 기술 : 데이터셋 분할(훈련/테스트 세트) 머신러닝 알고리즘 적용(랜덤포레스트, XGBoost 등) 모델 성능 평가(정확도, RMSE 등) 예제 : 주어진 데이터를 이용하여 고객 이탈 여부를 예측하는 분류 모델을 구축하고, 정확도를 출력하시오. 작업형 제3유형 (30점, 2문제, 각 15점) 주요 내용 : 데이터 시각화 및 고급 데이터 분석 요구되는 기술 : 데이터 시각화(히스토그램, 박스플롯, 산점도 등) 군집 분석(K-means, DBSCAN 등) 연관 분석(Apriori, FP-Growth 등) 예제 : 주어진 데이터를 이용해 군집 분석을 수행하고, 각 군집의 평균값을 시각화하시오. 시험에서 중요한 점 작업형 제2유형(40점)이 가장 중요 하므로, 모델 구축과 평가 연습이 필수입니다. 시험 환경은 구름IDE 기반 이므로, Python(Pandas, Scikit-learn, Matplotlib 등)에 익숙해져야 합니다. 제1유형과 제3유형은 기본적인 데이터 처리 및 시각화 능력을 평가 하므로, 이를 빠르게 해결할 수 있도록 연습이 필요합니다.
[리뉴얼] 처음하는 파이썬 머신러닝 부트캠프 (쉽게! 실제 캐글 문제 풀며 정리하기) [데이터분석/과학 Part2]
xgboost 2.1.3 버전의 XGBRegressor 사용시 pandas 2.2.2에서는 pd.util.version이 제거되었으므로 "AttributeError: module 'pandas' has no attribute 'util'"에러 발생하여 xgboost 라이브러리 코드를 수정해야 함 경로: $ANACONDA3_HOME/lib/python3.12/site-packages/xgboost/data.py 수정 후 주피터 재시작 # 기존 def is_pd_sparse_dtype(dtype: PandasDType) -> bool: """Wrapper for testing pandas sparse type.""" import pandas as pd if hasattr(pd.util, "version") and hasattr(pd.util.version, "Version"): Version = pd.util.version.Version if Version(pd.__version__) >= Version("2.1.0"): from pandas import SparseDtype return isinstance(dtype, SparseDtype) from pandas.api.types import is_sparse return is_sparse(dtype) # 변경 def is_pd_sparse_dtype(dtype: PandasDType) -> bool: """Wrapper for testing pandas sparse type.""" import pandas as pd from pandas import SparseDtype return isinstance(dtype, SparseDtype)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강의에서 `주 테이블이나 대상 테이블 중에 외래 키 선택 가능`이라고 하셨는데 `대상 테이블에 외래키가 있는 일대일 단방향 관계는 JPA에서 지원 안한다는 게` 무슨 말인가요..? 그러면 외래 키 선택 기준 이런 거 얘기할 필요 없이 무조건 일대일 단방향 관계에서는 주 테이블에 외래키를 설정해야하는 거 아닌가요
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 어떤 알고리즘을 학습하고 계신가요? 여기까지 이해하신 내용은 무엇인가요? 2. 어려움을 겪는 부분 어느 부분에서 막히셨나요? 코드의 어떤 로직이 이해가 안 되시나요? 어떤 개념이 헷갈리시나요? 3. 시도해보신 내용 문제 해결을 위해 어떤 시도를 해보셨나요? 에러가 발생했다면 어떤 에러인가요? 현재 작성하신 코드를 공유해주세요 def get_max_discounted_price(prices, coupons): if prices: prices.sort() if coupons: coupons.sort() discounted_prices = [] while prices and coupons: max_price = prices.pop() max_coupon = coupons.pop() discounted_prices.append(max_price * (100 - max_coupon) / 100) total_sum_prices = sum(discounted_prices) + sum(prices) return total_sum_prices 사실상 같은코드긴 한데, 혹시나해서 검증받고싶어서..
Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setName("member1"); member.setTeam(team); em.persist(member); //em.flush(); // 영속성 컨텍스트에 있는 쿼리를 db에 전송한다. //em.clear(); // 영속성 컨텍스트를 초기화 // 이렇게 하면, 위 em.persist()를 통해 영속성컨텍스트에 있는 Member를 가져오는게 아니라, // em.find()를 할때 db에서 select를 해서 가져온다. Team findTeam = em.find(Team.class, team.getId()); List<Member> members = findTeam.getMembers(); for (Member m : members) { System.out.println("m = " + m.getName()); } 여기에서 em.flush()와 em.clear()를 하지않으면, findTeam에 Members가 비어있는 이유가 무엇인지 모르겠습니다. em.flush()를해서 db에 있는 Team데이터와, em.flush()하지않은 영속성컨텍스트에 있는 Team데이터가 무엇이 다르길래 영속성컨텍스트에서 em.find를 하면 members가 비어있는것인지 모르겠습니다. 즉, db를 통해 em.find하면 members가 있고, 영속성컨텍스트를 통해 em.find를 하면 members가 없는데 왜 그런것인가요? 1차캐시에 team데이터를 저장하는것과 db에 team데이터를 저장하는것이 다른가요? 강의를 계속 봐도 이해가 가질않아 질문드립니다.