묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
질문입니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요.다음은 제가 처음에 푼 코드입니다.#include <bits/stdc++.h>using namespace std;int N;string S,temp1,temp2,Q;int main(){ cin>>N; cin>>S; temp1 = S.begin(); temp2 = S.end(); for(int i = 0 ; i<N ; i++){ cin >> Q; if(Q.begin() == temp1 && Q.end() == temp2){ cout<<"DA\n"; } else cout<<"NE\n"; }}저는 앞뒤글자들을 temp1,temp2에 저장해두고 새로 입력 받은 string또한 앞과 뒤를 비교하는 코드를 작성했습니다. 선생님 강의를 듣고 처음 한글자가 아닌 *을 기준으로 문제를 풀어야한다는 것을 알게됬습니다. 그런데 위 코드에서 문법적인 오류가 있는 것 같은데 문법적으로만 왜 오류인지 궁금합니다.감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
질문있습니다!
안녕하세요! 강의와는 다른 방식의 로직으로 풀어보았습니다.v 라는 방문처리 할 수있는 배열을 만들었습니다. 재료 배열을 순회하면서 M에서 해당 값을 뺏을 때 배열에 그 값이 있다면 입력값의 위치와 M-해당값의 위치를 방문 처리 해주면서 결과값을 count 하였습니다. Test case는 맞다고 뜨는데 제출하면 틀렸다고 뜨네요ㅜㅜ문제에 맞지 않는 잘못된 코드 일까요...?http://boj.kr/eb03bcf5031743d9a74c8465cb6a703c
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-I 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.80287934번 소스 코드 (acmicpc.net)큰돌님의 코드와 달리atoi함수로 벡터에 추가한후 정렬하였습니다.정답은 같게 나오는데 틀린 이유를 알고싶습니다ㅠ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
9996번 런타임에러
#include <bits/stdc++.h> using namespace std; vector<string> split(string input,string delimiter){ vector<string> ret; int delimiterPosition; while((delimiterPosition=input.find(delimiter))!=string::npos){ ret.push_back(input.substr(0,delimiterPosition)); input.erase(0,delimiterPosition+delimiter.length()); } ret.push_back(input); return ret; } int main(){ int N; cin>>N; fflush(stdin); string pattern; getline(cin,pattern); vector<string> splited_strings=split(pattern,"*"); string first=splited_strings[0],last=splited_strings[1]; string input[N]; for(int i=0;i<N;i++) cin>>input[i]; for(int i=0;i<N;i++){ // 접두사 if(first!=input[i].substr(0,first.size())) { // 없으면 cout<<"NE\n"; continue; } else input[i].erase(0,first.size()); // 있으면 // 접미사 if(input[i].find(last)==string::npos) { // 없으면 cout<<"NE\n"; continue; } else{ // 있으면 if(last==input[i].substr(input[i].size()-last.size())) cout<<"DA\n"; else cout<<"NE\n"; } } return 0; }어디서 런타임에러를 유발하는 지 모르겠습니다.
-
해결됨객체지향 개념에 바탕을 둔 Modern C++프로그래밍
공지
강좌 운영이나 강의 내용에 관해 궁금한 점이 있으면 자유롭게 나누어주세요.교수자, 수강생 누구나 글쓰기와 댓글 쓰기가 가능합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-H 질문있습니다
http://boj.kr/a2bc8496dc1046a495a22dd0185ad515여기 제 코드입니다.a만큼의 크기를 가진 배열 arr을 사용해서가장 최근의 a일의 온도를 저장합니다.최근 a일간의 온도의 최대값은 결국 새로 들어온 값이 가장 오래된 날짜보다 높다면 최대값이 변경되는것이니해당 부분을 if문으로 처리해서 sum값을 변경시켰는데오답이 나옵니다.구간마다 sum을 계산하여 max값을 비교한다면 맞다고 하는데제 방식이 왜 틀렸는지 이해가 가질 않습니다.
-
해결됨C++ 프로그래밍
공지
강좌 운영이나 강의 내용에 관해 궁금한 점이 있으면 자유롭게 나누어주세요.교수자, 수강생 누구나 글쓰기와 댓글 쓰기가 가능합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
주난의 난 질문
저는 bfs와 dfs를 혼용하는 방식으로 코드를 짯는데 이렇게 짜면 단점이 어떤게 있을지 궁금합니다.큰돌님 항상 강의 잘 듣고 있습니다 감사합니다.#include <iostream> #include <vector> #include <algorithm> #include <queue> #include <stack> using namespace std; int dx[4] = {0, 0, 1, -1}; int dy[4] = { 1, -1, 0, 0 }; int N, M, startX, startY, endX, endY; char board[300][300] = { 0 }; int visit[300][300] = { 0 }; queue<pair<int, int>> q; void print() { for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cout << board[i][j] << " "; } cout << "\n"; } cout << "\n"; } void print2() { for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cout << visit[i][j] << " "; } cout << "\n"; } cout << "\n"; } void dfs(int x, int y, int a) { //print2(); visit[y][x] = a; for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (nx <0 || nx > M || ny <0 || ny > N) continue; if (!visit[ny][nx] && board[ny][nx] == '0') { dfs(nx, ny, a); } else if (!visit[ny][nx] && (board[ny][nx] == '1'|| board[ny][nx] == '#')) { board[ny][nx] = '0'; visit[ny][nx] = a; q.push({ nx, ny }); } } } void bfs() { q.push({ startX-1, startY-1 }); visit[startY-1][startX-1] = 1; while (!q.empty()) { //print2(); int x = q.front().first; int y = q.front().second; q.pop(); for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (nx <0 || nx > M || ny <0 || ny > N) continue; if (!visit[ny][nx] && board[ny][nx] == '1') { q.push({ nx, ny }); visit[ny][nx] = visit[y][x] + 1; board[ny][nx] = '0'; } else if (!visit[ny][nx] && board[ny][nx] == '0') { dfs(nx, ny, visit[y][x] + 1); if (visit[endY-1][endX-1]) return; } else if (!visit[ny][nx] && board[ny][nx] == '#') { visit[ny][nx] = visit[y][x] + 1; return; } } } } int main() { char symbol; cin >> N >> M; cin >> startY >> startX >> endY >> endX; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cin >> symbol; board[i][j] = symbol; } } bfs(); cout << visit[endY - 1][endX - 1]-1; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-W [2342] 문제 질문입니다.
안녕하세요 큰돌님. 항상 좋은 강의 감사드립니다.7-W에 제가 생각했을때 같은 논리인것 같은데 1%에서 오답으로 떠 질문 드립니다 ㅜㅜ 아래는 제 코드입니다.#include<bits/stdc++.h> using namespace std; int a[100001]; int n; int dp[100001][5][5]; int go(int idx,int left, int right){ if(idx == n) return 0; int &ret = dp[idx][left][right]; if(ret!=-1) return ret; ret = 987654321; int num = a[idx]; //Left if(left == 0) ret = min(ret,go(idx+1,num,right)+2); if(num == left) ret = min(ret,go(idx+1,left,right)+1); if(abs(left-num)==2) ret = min(ret, go(idx+1,num,right)+4); if((num+1)%4 == left || (num!=1 && num-1 ==left) || (num==1 && left ==4))ret = min(ret,go(idx+1,num,right)+3); //Right if(right == 0) ret = min(ret,go(idx+1,left,num)+2); if(num == right) ret = min(ret,go(idx+1,left,right)+1); if(abs(right-num)==2) ret = min(ret,go(idx+1,left,num)+4); if((num+1)%4 == right || (num!=1 && num-1 ==right) || (num==1 && right ==4)) ret = min(ret,go(idx+1,left,num)+3); return ret; } int main(){ while(true){ int num = 0; cin>>num; if(num==0) break; a[n]=num; ++n; } memset(dp,-1,sizeof(dp)); cout<<go(0,0,0)<<"\n"; } 현재 코드에서//Left if(left == 0) ret = min(ret,go(idx+1,num,right)+2); if(num == left) ret = min(ret,go(idx+1,left,right)+1); if(abs(left-num)==2) ret = min(ret, go(idx+1,num,right)+4); if((num+1)%4 == left || (num!=1 && num-1 ==left) || (num==1 && left ==4))ret = min(ret,go(idx+1,num,right)+3); //Right if(right == 0) ret = min(ret,go(idx+1,left,num)+2); if(num == right) ret = min(ret,go(idx+1,left,right)+1); if(abs(right-num)==2) ret = min(ret,go(idx+1,left,num)+4); if((num+1)%4 == right || (num!=1 && num-1 ==right) || (num==1 && right ==4)) ret = min(ret,go(idx+1,left,num)+3);부분만 강의코드와 비슷하게 아래와 같이 바꾸면ret = min(ret, go(idx+1,a[idx],right)+check(left,a[idx])); ret = min(ret, go(idx+1,left,a[idx])+check(right,a[idx]));통과가 됩니다... 다른 많은 예제들도 넣어봤는데 잘 돌아가는데 어디서 잘못 짚은걸까요?? ㅠㅠ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
c++ 교안
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.c++ 교안 보면서 익히고있는데요 C++ 학습중인데 어디까지 직접 보면서 공부해야하죠?강의는 언제부터 보면되나요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
백준 문제 미리 모아둔거 없나요???
강의를 틀기전에 먼저 풀어보려하는데 혹시 강의에 사용되는 문제목록 모아져있는건 없을까요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-G 코드 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.예시입출력 다 맞고,로직상 무조건 맞다고 생각하는데3%에서 틀리다고 나옵니다.도대체 뭐가 잘못된건지 모르겠습니다.. 도와주십쇼http://boj.kr/82e12b941d914352baab934b52c8a04b
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-B 유기농 배추 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.bfs를 활용해서 문제를 풀었습니다.근데 계속 메모리초과가 나는데그 이유를 알려주시면 감사하겠습니다..http://boj.kr/b024bff359c64a679143f2c6633ea8c3
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
질문드립니다.
강의에 혹시 다이렉트x 내용도 있을까요?없다면 다른 강의 중에 다룬 게 있을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
안녕하세요 큰돌님 암기왕 문제 질문 드립니당
https://www.acmicpc.net/source/80071421일단 제 코드입니다. 입력 계수에 대해서 이진탐색을 모두 해보는 풀이를 생각 했습니다. 입력: N 탐색 시간: logN이 걸리니까 NlogN 시간이 걸리고 N은 백만이니, 1000000*20=2000000(이천만)이고 시간제한은 2초니까 가능하지 않나요? 시간초과가 나와서 왜 틀렸는지 피드백을 받고 싶습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 질문입니다.
안녕하세요..제가 이문제를 다시 푸는 과정에서reverse함수를 사용해서풀어보았는데요예제는 다 맞는데 왜틀리는지 모르겠습니다...답변 부탁드립니다.http://boj.kr/ee37f6b6daa14f158949673b90e65815 #include <iostream> #include <algorithm> #include <vector> using namespace std; vector<string> solution(const int N, const string& str, const vector<string>& v) { vector<string> answer; size_t pos = str.find('*'); string pre = str.substr(0, pos); string suf = str.substr(pos + 1); reverse(suf.begin(), suf.end()); // cout << "pre = " << pre << ", suf = " << suf << '\n'; // test for (const string& s : v) { string rs(s); reverse(rs.begin(), rs.end()); if (s.find(pre) == 0 && rs.find(suf) == 0) answer.push_back("DA"); else answer.push_back("NE"); // cout << "str = " << s << "\nrstr = " << rs << '\n'; // cout << "answer = " << answer.back() << "\n\n"; } return answer; } int main() { int N; string str; cin >> N >> str; vector<string> arr(N); for (string &s : arr) cin >> s; vector<string> answer = solution(N, str, arr); for (string& s : answer) cout << s << '\n'; return 0; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-B 질문있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/38bfd119659f450f9f4c86153c28d25d저는 처음에 stack을 생각하고 다시 해당 stack에 존재하는 요소들을 순서대로 string에 추가하는게 힘들다고 판단되어 deque로 하였습니다. 근데 메모리 초과로 틀려서 ㅠㅠ 어떤 부분이 문제인지 궁금합니다. 항상 감사합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-T 질문있습니다 :)
안녕하세요 선생님 🙂선생님께서 알려주신대로 무식하게 풀 수 있는 방법부터 생각하는건 되기 시작했는데요, 아직 시간복잡도까지 고려하는 수준은 아닌가 봅니다 ㅠㅠ 강의를 듣고 아래의 방식의 시간복잡도가 굉장히 커진다는 것은 이해를 했습니다. 그래도 출력 값이 정답이라고 생각을 했는데요, 디버깅을 해보니 2중 for문을 사용하는 부분에서 i가 1인 경우를 인식하지 못하고 바로 i가 2인 경우로 넘어가지더라구요. 그러다보니 첫 번째 테스트케이스는 올바른 답으로 출력이 되지만, 두 번째 테스트케이스는 오답이 나오고 있습니다. 한참을 봐도 제가 무엇을 실수한건지 잘 모르겠습니다..ㅠ 조언 부탁 드립니다 :) https://www.acmicpc.net/source/share/65830377ec624e879c48d979af5762d4
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
칠무해 문제를 왜 틀렸는지 모르겠습니다..
https://www.acmicpc.net/submit/14729/80035550제 코드의 링크입니다.. 79퍼에서 멈추는데 왜 틀렸는지 모르겠습니다.. 입력의 크기, 실수 오차까지 생각 했는데 제가 놓친게 있을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-G 질문 있습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 큰돌님 강의 잘 보고 있습니다! 다름이 아니라 코드 중에 이해가 잘 안되는 부분이 있어서 질문드립니다!if (!visited[next]) { q.push(next); visited[next] = visited[now] + 1; cnt[next] += cnt[now]; } else if (visited[next] == visited[now] + 1) { cnt[next] += cnt[now]; }위와 동일하 코드가 있는데 if(!visited[next])코드는 한번도 방문한 정점이 아니라 처음 방문할 때가 해당 정점을 방문할 최소 시간이라는 것이라는 것은 알겠는데,else if (visited[next] == visited[now] + 1) 이 부분이 어떻게 해당 정점에 방문한 최소 시간이 되는 것을 알 수 있고 그걸 문제를 풀면서 어떻게 도출할 수 있는걸까요?