안녕하세요 선생님 🙂 플로이드 와샬 개념문제로 11404번 문제를 풀다가 갑자기 삼항연산자의 개념이 헷갈려졌습니다 ㅠㅠ 구글링해도 기본적인 설명만 있고, 교안도 삼항 연산자 관련 내용이 없어서 질문 드립니다.. http://boj.kr/eefe3db0d7aa4338bfffb83a6233db67 // 입력 부분 dist[a][b] = INF ? min(dist[a][b], c) : c; // 출력 부분 else cout << (dist[i][j] == INF ? 0 : dist[i][j]) << " "; 입력 부분에 ==가 아닌 =가 들어가는 이유를 모르겠습니다. 또, = 대신 ==를 넣으면 안되는 이유를 모르겠습니다. 제가 아는 삼항 연산자는 if (dist[i][j] == INF) 라는 조건을 만족하면 dist[i][j]가 왼쪽이 되고, 만족하지 않으면 dist[i][j]가 오른쪽이 되는 것을 한 줄로 요약한 코드라고 알고 있습니다. 개념이 심하게 헷갈리네요 ㅠㅠ 알려주시면 감사하겠습니다..!!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 해당 코드로 하니까 실패했고 http://boj.kr/b594a33a5cd74e75aef53810caed4d31 해당 코드로 cleanDust부분을 변경하니까 맞았습니다. 왜 1번 처럼 cleanDust를 해주는 거는 틀린 걸까요? http://boj.kr/da76558b5fd7483caa9fe86f42569358
안녕하세요 선생님 🙂 벌써 마지막 강의네요 ^^ 감회가 새롭습니다. 선생님께서 작성하신 코드를 제가 알아보기 편하게 변경하고 있습니다. 입력 값을 u, v, w 순서대로 입력을 하였는데 adj배열과 우선순위 큐의 입력을 w, v 순서대로 하셨더라구요. 이걸 v, w 순서대로 입력을 바꾸면 시간초과가 납니다. 30분넘게 검증을 거쳤으나, 변수 이름 변경 과정에서 실수가 있는 것 같지는 않았습니다. 혹시나 제가 실수한 것인지, 실수가 없다면 시간초과가 나오는 이유가 무엇인지 알려주시면 감사하겠습니다 🙂 http://boj.kr/38a80ad865d4417ab06bc379f7111a5e
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/b607e5846a7142e7b6c87f146bc1a3c9
안녕하세요 강사님, DP개념강의 설명하실 때 자두나무 코드를 예시로 설명해주셨는데요. 강사님 코드대로 실행해보니 제가 생각한 테스트케이스랑 다르게 나와서 질문드립니다. 입력 3 4 1 1 1 제 예상: 3 강사님 코드 출력: 1 입력 3 12 1 1 1 제 예상: 3 강사님 코드 출력: -999999997
void make(int n, int psum[], map<int, int>& mp) { for (int i = 1; i <= n; i++) { for (int j = i; j <= n + i - 1; j++) { int value = psum[j] - psum[j - i]; mp[value]++; if (i == n)break; } } } 위 코드에서 j의 범위가 j <= n이 아닌 j <= n + i - 1인 것인 이유는 원형구조를 선형으로 대체하기 위해 늘려준 범위인 것일까요??
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님 이문제를 풀면서 이해가 안되는 부분이 있습니다. bool check 부분에서 bool flag = 0;으로 둘 때랑 0으로 초기화 하지 않고 bool flag; 로 둘때 초기화를 화면 백준에서 결과 값이 다르게 나옵니다. bool flag;로 두면 시간 초과 bool flag = 0으로 하면 맞았습니다. 이렇게 뜨는 데 왜그런걸까요? #include <bits/stdc++.h> using namespace std; int n, m, a[104][104],cnt=1,ret,visited[104][104]; vector<pair<int,int>>v; const int dy[] ={-1,0,1,0}; const int dx[] = {0,1,0,-1}; bool check(){ bool flag = 0; for(int i =0; i < n; i++){ for(int j =0; j < m;j++){ if(a[i][j] == 1) flag = true; } } if(flag) return 0; else return 1; } void dfs(int y, int x){ visited[y][x] = 1; if(a[y][x] == 1){ v.push_back({y,x}); return; } for(int i = 0; i<4;i++){ int ny = y + dy[i]; int nx = x + dx[i]; if(ny < 0 || nx < 0 || ny >= n || nx >= m) continue; if(visited[ny][nx]) continue; dfs(ny,nx); } return; } int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); cin >> n >> m; for(int i = 0; i < n; i++){ for(int j =0; j < m;j++){ cin >> a[i][j]; } } while(true){ memset(visited,0, sizeof(visited)); v.clear(); dfs(0,0); ret = v.size(); for(pair<int, int> c : v){ a[c.first][c.second] = 0; } cnt++; if(check()) break; } cout << cnt - 1 << "\n" << ret << "\n"; return 0; }
http://boj.kr/3c317ac3fc7940aaa96c9d416b207932 안녕하세요 선생님. 2-S 효율적인 해킹 문제를 위와같이 풀어보려 했는데 실패했습니다. 매 정점마다 각 정점을 start로 삼아 dfs로 탐색 후, 탐색을 마쳤을 때의 visited개수의 총합을 sum_hacked() 함수로 구해 가장 효율적인 해킹이 가능한 경우를 구하려 했는데요. 예제는 Pass되었으나 채점에서 바로 오답처리가 됩니다. 잘못 생각한 부분 힌트 주시면 감사드리겠습니다. 감사합니다.
안녕하세요, 우선 좋은 강의 감사합니다. 제가 보기엔 섹션1의 예제1에서 가장 중요한 아이디어는 아래 3가지인 것 같습니다. 조작2와 조작3은 해당 칸의 색을 반전 시키는 것 외엔 같다. 모든 칸에 우선 조작2를 시행한다. 모든 칸에 조작2를 시행하면, 1번 아이디어에 의해 모든 검정타일을 반전 시킬 수 있다. 또한, 해설에서 생각의 흐름 또한 1 → 2 → 3 인 것 같습니다. 1번은 쉽게 관찰할 수 있는데, 2번 아이디어는 어떻게 생각하는 건가요? 제가 혼자 문제에 대해 고민하며 1번 아이디어를 관찰했을 땐, 1번 아이디어를 어떻게 사용해야 할지 감이 잘 안 왔습니다. '조작2를 시행한 칸에 대해 조작3으로 번복하면 해당 칸 외엔 변화가 없고 해당 칸의 색만 바뀐다' 라는 사실까진 도달했지만, 모든 칸에 조작2를 우선적으로 시행해두고 아이디어1을 이용할 생각까진 도달하지 못했습니다. 이런 생각을 하지 못한 사람 입장에선, 모든 칸에 조작2를 먼저 해본다는 게 다소 막연하고 배경의 motivation이 없이 갑자기 툭 나온 생각 같다는 느낌이 들어서 질문 드립니다. 더 나아가, 어떻게 이런 생각들을 운에 맡기지 않고 논리적으로 접근할 수 있을까요?
안녕하세요 강사님 잘 보고 있습니다!! 아래와 같이 해도 괜찮을까요? 감사합니다~! from collections import Counter def solution(nums, target): answer = [0]*2 dict = Counter(sorted(nums)) for i in dict: if dict[target-i] == 1: return sorted([i, target-i]) return answer
안녕하세요 선생님 🙂 lower_bound와 관련하여 궁금한 것이 있어서 질문드립니다. 해당 문제는 lower_bound를 이용하여 A 안에 있는 요소들 중 하나를 골라서 B에 있는 요소보다 큰 경우를 누적하여 더한 후에 출력하는 문제였습니다. 문제의 결과 값에서 lower_bound의 역할을 유추해보면, 1, 2번째 파라미터에 넣는 배열의 범위에서 3번째 파라미터에 있는 요소보다 작은 요소의 개수를 출력해주는 함수라는 것을 알 수 있었습니다. 반대로 upper_bound는 작은 요소가 아닌 큰 요소의 개수를 출력해주는 함수라는 것을 알게 되었습니다. 그렇다면, 같은 요소의 개수를 출력해주는 방법도 있을 거라고 생각하는데요, 구글을 아무리 뒤져봐도 키워드 선택을 잘못해서 그러는건지.. 관련 자료를 찾을 수 없었습니다. 혹시 이런 함수가 따로 있다면 알려주시면 도움이 많이 될 것 같습니다 :) lower_bound가 같은 경우도 처리해준다는 자료를 보긴 했는데요, 이 자료에 신뢰성이 있으려면 해당 문제에서 A와 B의 요소가 같아도 A가 B를 잡아먹을 수 있다는 조건을 만족해야 할 것 같습니다. 아래는 제가 보았던 자료의 링크입니다. https://chanhuiseok.github.io/posts/algo-55/
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님. 선형탐색으로 하면 어떻게 되는지 궁금하여 백준에 해당 코드를 제출하여보았는데 예상과 다르게 "틀렸습니다" 가 나옵니다. 선형탐색은 시간복잡도가 더 클 뿐 틀린것은 아니기에 "시간초과" 가 나와야 되는거 아닌가요?? #include<bits/stdc++.h> using namespace std; int n; int m; int a[300002]; int ret = 987654321; bool search(int mid) { int t_ret = 0; for (int j = 0; j < m; j++) { t_ret += a[j] / mid; if (a[j] % mid) t_ret++; } return t_ret <= n; } int main() { cin >> n >> m; int left = 1, right = -1; for (int i = 0; i < m; i++) { cin >> a[i]; right = max(right, a[i]); } ret = right; for (int i = left; i <= right; i++) { if (search(i)) { ret = min(ret, i); break; } } cout << ret; return 0; }
풀긴 했는데 메모리랑 시간 사용량이 어마어마 해서요.. 실전이 얼마 안남아서 실전에서도 이렇게 풀어도 되나 싶어서 여쭤봅니다... 제가 파악한 큰돌님과 저의 코드 차이점은 저는 연산 기호를 사용할 수 있냐는 기준을 카운팅 배열을 쓰고 원복하고 했던 거랑 수식들을 계산할 때, 스택에 넣고 계산하는 방식을 쓴 게 가장 큰 차이인 것 같습니다. 그리고 실제 문제로 이런 문제가 나온다면 몇 분 안에 풀어야 될지도 궁금합니다..! 저는 40~50분 안에 풀면 안정권이라 생각했는데 큰돌님 의견이 궁금하네욤! http://boj.kr/229b1729870841dfa19aaa13c1760073
안녕하세요 선생님 🙂 다시 풀다가 이해가 되지 않는 부분이 있어서 질문드립니다. 재귀를 할 때 함수 파라미터에 sum - 1, minus - 1이 아닌 --sum, --minus를 넣을 때 틀리는 이유가 궁금합니다. 위의 아이디어를 떠올린 계기는, -1연산을 습관적으로 sum--와 같은 후위연산자를 사용해서 풀이했었습니다. 결과가 틀렸을 때, '후위연산자여서 함수가 재귀될 때 바로 -1이 되지 않아서 그런거구나'라는 생각이 들어서 --sum과 같은 전위연산자를 사용했는데도 틀리더라구요.. 조언주시면 정말 감사하겠습니다!! ^^ http://boj.kr/2a8523783dfd497a96fc3229f86e0218
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/9d9e543bdcc34d91b61422b4f11385ae 안녕하세요 선생님 제가 작성한 코드입니다. 아무리 생각해도 이코드도 맞아야 되는거 같은데 왜 틀렸는지 도저히 모르겠네요... 어떤 부분이 틀렸는지 궁금합니다!