백기선님, 안녕하세요? 제작해주신 강의들을 잘 보고 있습니다. "더 개발자, 인터뷰 가이드" > 4부 : 핵심 역량 파트 소개 > "6가지 주요 소프트 스킬"에서, (https://www.inflearn.com/course/lecture?courseSlug=개발자-인터뷰&unitId=61845) " Cusomer Focus"라고 작성하신 부분이 있습니다. https://www.microsoft.com/en-us/research/group/customer-insights-research/articles/driving-a-customer-driven-mindset-in-a-tech-organization/ 를 봤을 때, "Customer Focus"인 것으로 생각됩니다. 어쩌면 사소한 부분일 수도 있는데요... 혹시, 오타 제보로 불편하셨다면 죄송합니다. 저는 계속 백기선님이 남기신 발자국들을 따라 가겠습니다. 감사합니다!
안녕하세요 큰돌님! http://boj.kr/01de00905c874d749fef7bbf7313fc02 큰돌님의 풀이 방식이랑 조금 다른 방식으로 했는데요. 완탐 + dp을 생각해서 풀어봤는데 테스트케이스도 실패하고 어디가 문제인지 잘 감이 안잡히네요... 혹시 제 코드 봐주실수 있나요? 제 접근 자체가 잘못된거면 그냥 깔끔하게 접게요.... 풀릴꺼 같은데 안풀리니깐 미련이 자꾸 남습니다.
해당 문제에서 "3*8+5" 를 예시로 들어가면서 코드까지 옮기는 내용으로 수업을 해주셨습니다. 이 경우 당연하게 최대 1개 쌍의 괄호가 들어갈 수 있는 경우의 수가 2개이므로 수긍은 되었습니다. 하지만, 제가 생각하기에 최대 수식의 길이가 19이므로 그 경우의 괄호는 상당히 많아질텐데 현재의 2개의 경우의 수를 고려하는 코드로도 커버가 되는 건가요? 재귀 형태라서 그렇다기에는 이해가 잘 안 갑니다.. 길이가 11인 예시 "3+5-8*1*4+2" 만 해도 (3+5)-(8*1)*(4+2)로 최대 괄호의 수(쌍)가 3개짜리인 경우의 수가 상당히 많아질 수 있는데 현재의 코드가 어떻게 되는건지 모르겠습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강의 잘 듣고 있습니다. 강의 풀이 참고하여 코드 작성하였는데. ans.push_back({it-LIS.begin(), A[i]}); 라인의 위치에 따라 "it-LIS.begin()"의 값이 쓰레기값일 때도 있고 그래서.., 현상의 이유가 궁금합니다. ans.push_back()을 뒤에 위치시켰을때, pos_ 값이 쓰레기값이 되는 이유 질문드려요. 그 이유로, LIS.push_back(A[i]); 가 수행되고 나면 LIS.begin()의 주소값이 변경되는 것으로 생각되는데, 맞을까요? 전체 코드>> #include <bits/stdc++.h> using namespace std; int N; vector<int> A; vector<int> LIS, Ret; int len; vector<pair<int, int>> ans; int main(){ cin.tie(NULL); cout.tie(NULL); ios_base::sync_with_stdio(false); cin >> N ; A = vector<int>(N,0); for(int i =0 ; i < N ; ++i) cin >> A[i]; for(int i = 0 ; i < N ; ++i){ auto it = lower_bound(LIS.begin(), LIS.end(), A[i]); ans.push_back({it-LIS.begin(), A[i]}); /* 현재 위치에서 push_back 하였을 떄: >> ans 배열에 담긴 값: ans = { {0, 10} {1, 20} {0, 10} {2, 30} {1, 20} {3, 50} } */ if (it == LIS.end()) LIS.push_back(A[i]); else *it = A[i]; /* 아래 위치에서 push_back 하였을 떄(주석): ans.push_back({it-LIS.begin(), A[i]}); >> ans 배열에 담긴 값: ans = { {-1405095968, 10} {-7, 20} {0, 10} {10, 30} {1, 20} {3, 50} } */ } cout << "디버깅" << endl; for(auto a : ans) cout << a.first << " " << a.second << endl; cout << endl; int len = LIS.size(); cout << len << endl; // 배열을 trace for(int i = N-1 ; i >= 0 ; --i){ if (ans[i].first == len-1){ Ret.push_back(ans[i].second); len--; } } reverse(Ret.begin(), Ret.end()); for(auto r: Ret) cout << r << " "; cout << endl; return 0; }
http://boj.kr/8cefb4955fb64d18ad353997d162cc29 제출시 77%에서 오답처리 되는데, 어느 부분이 틀렸는지 모르겠습니다. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강의 잘 듣고 있습니다. 다름이 아니라. ll right = 1E18로 지정하면 제출시 틀렸습니다가 뜨고, ll right = 1E15 정도로 하면 정답이 뜨는데, mid 의 값계산이 잘못되고 있는건가 체크해봐도 오버플로우가 날만한게 없어서. 이유가 궁금합니다. #include <bits/stdc++.h> using namespace std; typedef long long ll; ll N, M; vector<ll> A; ll temp; bool check(ll mid){ temp = M; for(int i =0 ; i < M ; ++i){ temp += mid/A[i]; } return temp >= N; } int main(){ cin >> N >> M; A = vector<ll>(M,0); for(int i = 0 ; i < M ; ++i) cin >> A[i]; if ( N <= M) cout << N << endl; else{ ll left = 0; ll right = 1E18; ll ret = 0; while(left <= right){ ll mid = (left+right)/(long long)2; if(check(mid)){ right = mid-1; ret = mid; } else{ left = mid+1; } } temp = M; for(int i =0 ; i < M ; ++i) temp += ((ret-1)/A[i]); for(int i =0 ; i < M ; ++i){ if (ret % A[i] == 0) temp++; if (temp ==N){ cout << i +1 << "\n"; return 0; } } } return 0; }
http://boj.kr/5b42789344b749769d5371b7e76dfb10 안녕하세요 큰돌님 ! 강의 너무 재밌게 잘 듣고 있습니다. 문제해설대로 map을 사용하는게 좋은 방법이란걸 깨달았지만 해설을 듣기전 혼자 풀었을때 작성한 코드인데요. 저는 전역으로 벡터를 만들어서 더 좋은 조건(사전 순으로 빠른)의 벡터가 만들어졌을 시 비교하여 전역 벡터로 할당해주는 방식으로 짜보았는데요. 해당문제를 검색해보며 여러 테스트케이스를 해봐도 맞았는데 제출은 틀렸다고 나옵니다 .. ㅠㅜㅠㅜ 어떤 반례가있는지 궁금합니다.
안녕하세요 큰돌님 문제 해설에서 시간복잡도 계산하실때 300C3 이라고 하신 부분에 대해서 질문드립니다. go 함수 호출시마다 check 함수또한 호출하게 될텐데 10*30 배열의 경우 check 한번당 300번의 탐색을 해야하므로 300C3 * 300이 되어야하는것이 아닌가요?
안녕하세요, 젬마님 강의 잘 듣고 있는 수강생입니다. 혹시 수업에서 다루지 않은 leetcode 문제도 질문 받아주실지 잘 모르겠지만 한 번 올려 봅니다...! Sales Analysis 3 문제의 답을 아래와 같이 적었는데 계속 오류가 납니다. 답변 주시면 감사하겠습니다. SELECT P.PRODUCT_ID, P.PRODUCT_NAME FROM PRODUCT P INNER JOIN ( SELECT * FROM SALES WHERE PRODUCT_ID NOT IN ( SELECT PRODUCT_ID FROM SALES WHERE SALE_DATE < '2019-01-01' OR SALE_DATE > '2019-03-31' ) ) N ON P.PRODUCT_ID = N.PRODUCT_ID;
count라는 매개변수를 같이 전달해주기 보다 dfs가 호출될 때마다 answer를 넣어주는 방식으로 풀어봤는데 왜인지 end 값을 찾았을 때 return이 적용이 안되는 거 같습니다. 혹시 어떤 문제가 있는지 봐주실 수 있나요? import java.util.*; import java.io.*; class Main { static int N, start, end, M; static boolean[] visited; static ArrayList<Integer>[] graph; static int answer = -1; private static void dfs(int i) { if (i == end) { System.out.println("end: " + end); return; } visited[i] = true; for (int j = 0; j < graph[i].size(); j++) { int next = graph[i].get(j); if (visited[next] == false) { System.out.println("next: " + next); dfs(next); answer++; } } } public static void main(String[] args) throws IOException{ // 입력 및 초기화 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); N = Integer.parseInt(br.readLine()); // 노드의 개수 StringTokenizer st = new StringTokenizer(br.readLine()); start = Integer.parseInt(st.nextToken()); // 시작 노드 end = Integer.parseInt(st.nextToken()); // 끝 노드 System.out.println(end); M = Integer.parseInt(br.readLine()); // 간선의 개수 visited = new boolean[N+1]; // graph 선언 후 초기화 graph = new ArrayList[N+1]; for (int i = 1; i <= N; i++) { graph[i] = new ArrayList<>(); } for (int i = 1; i <= M; i++) { st = new StringTokenizer(br.readLine()); int x = Integer.parseInt(st.nextToken()); int y = Integer.parseInt(st.nextToken()); graph[x].add(y); graph[y].add(x); } System.out.println(Arrays.toString(graph)); // dfs 호출 dfs(start); System.out.println(answer); bw.close(); br.close(); } }
https://www.acmicpc.net/source/share/52db515483bf48409679906723d0d91f 위 코드는 오답이고 https://www.acmicpc.net/source/share/4d3ef9f8e6c74ed2af729ac607ef92dd 위 코드는 정답인데 두 코드의 로직에 어떤 차이가 있는지 궁금합니다 - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
for y in arr_y: for x in arr_x: 제공해주신 코드에서 y,x 각 축을 꼭 다돌아야 하는건가요? 강사님이 설명해주신부분에서 여러명이 한곳에서 모일때 비용을 최소화하기위해서는 여러명중 한명의 집에서 모이면된다. 라는 부분을 참고하면 입력된 4개의 좌표(집)값에 대해 각 좌표 값에대해 나머지 좌표값들의 거리를 계산하면 되는거아닌가요..?? for ex, ey in arr: # [15, 14], [15, 16], [14, 15], [16, 15] for x, y in arr: # [15, 14], [15, 16], [14, 15], [16, 15] 이런식으로요 조언 부탁드립니다.
선생님, 안녕하세요. visited를 맵에 넣어서 (y와 x좌표를 스트링으로 바꾼 후 키로 삼고, value는 1이나 true를 줬습니다.) 하는 방식으로 풀어봤습니다. 또, 배추의 좌표들을 받을 때, 이를 벡터에 넣어줘서 벡터를 반복문을 돌며 dfs를 실행하며 visited맵을 체크해줬어요. 배열로 받던 visited를 맵으로 바꾸고, 벡터에 배추 좌표를 넣어주는 정도라서 식이 많이 다른것 가지는 않구요, 이렇게 하면 2중배열을 돌지 않아도 되서 약간이나마 더 효율적이라는 생각도 드는데요. 테스트 케이스는 맞는데, 제출하면 틀렸다고 나옵니다. 어떤 반례가 있을까요? http://boj.kr/5fdb9a3986444cf7b5f0723ce0db6048