http://boj.kr/c287b933ed0442d4ba02329f7601b61b 선생님, 안녕하세요. 동생의 위치를 미리 구해놓고, 수빈이가 그 위치에 갈 수 있는지를 구하는 식으로 했습니다. bfs를 이용했고, bfs의 로직 안에 현재 수빈이가 동생보다 빨리 방문했을 때를 처리하는 로직을 넣었는데요. 강의에서 설명해주셨던 것처럼, +1 -1을 하면 제자리로 돌아올 수 있고, 이때 2초가 걸리기 때문에 시간차가 반드시 짝수여야만 수빈이가 동생을 찾을 수 있기 때문에, 동생이 오는 시간 - 현재 수빈이가 오는 데 걸린 시간 이 짝수 일때, 동생이 오는 시간을 최소값으로 넣는 로직을 넣었습니다. 그런데 답이 틀렸다고 나와서, 1)왜그런건지? 2)visited배열을 2차원으로 한거랑 무슨 차이가 있는지 궁금합니다.
문제에서 주어지는 조건은 맨 왼쪽 아래가 (0,0) 지점이라고 했는데 2차원 배열로 생각해보면 맨 왼쪽 위가 (0,0) 입니다. 강사님의 코드를 출력해보면 이런식으로 나오는데 문제에 있는 그림이랑 비교해보면 위치가 반대입니다. 이렇게 나오는 이유가 위에서 언급한 (0,0)의 기준이 맨 밑에서 왼쪽인지, 맨 위에서 왼쪽인지의 차이인듯 한데 상관없는건가요..?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 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또한 앞과 뒤를 비교하는 코드를 작성했습니다. 선생님 강의를 듣고 처음 한글자가 아닌 *을 기준으로 문제를 풀어야한다는 것을 알게됬습니다. 그런데 위 코드에서 문법적인 오류가 있는 것 같은데 문법적으로만 왜 오류인지 궁금합니다. 감사합니다.
안녕하세요! 강의와는 다른 방식의 로직으로 풀어보았습니다. v 라는 방문처리 할 수있는 배열을 만들었습니다. 재료 배열을 순회하면서 M에서 해당 값을 뺏을 때 배열에 그 값이 있다면 입력값의 위치와 M-해당값의 위치를 방문 처리 해주면서 결과값을 count 하였습니다. Test case는 맞다고 뜨는데 제출하면 틀렸다고 뜨네요ㅜㅜ 문제에 맞지 않는 잘못된 코드 일까요...? http://boj.kr/eb03bcf5031743d9a74c8465cb6a703c
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 80287934번 소스 코드 (acmicpc.net) 큰돌님의 코드와 달리 atoi함수로 벡터에 추가한후 정렬하였습니다. 정답은 같게 나오는데 틀린 이유를 알고싶습니다ㅠ
http://boj.kr/a2bc8496dc1046a495a22dd0185ad515 여기 제 코드입니다. a만큼의 크기를 가진 배열 arr을 사용해서 가장 최근의 a일의 온도를 저장합니다. 최근 a일간의 온도의 최대값은 결국 새로 들어온 값이 가장 오래된 날짜보다 높다면 최대값이 변경되는것이니 해당 부분을 if문으로 처리해서 sum값을 변경시켰는데 오답이 나옵니다. 구간마다 sum을 계산하여 max값을 비교한다면 맞다고 하는데 제 방식이 왜 틀렸는지 이해가 가질 않습니다.
안녕하세요 큰돌님. 항상 좋은 강의 감사드립니다. 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])); 통과가 됩니다... 다른 많은 예제들도 넣어봤는데 잘 돌아가는데 어디서 잘못 짚은걸까요?? ㅠㅠ
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. c++ 교안 보면서 익히고있는데요 C++ 학습중인데 어디까지 직접 보면서 공부해야하죠? 강의는 언제부터 보면되나요??
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 예시입출력 다 맞고, 로직상 무조건 맞다고 생각하는데 3%에서 틀리다고 나옵니다. 도대체 뭐가 잘못된건지 모르겠습니다.. 도와주십쇼 http://boj.kr/82e12b941d914352baab934b52c8a04b
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. bfs를 활용해서 문제를 풀었습니다. 근데 계속 메모리초과가 나는데 그 이유를 알려주시면 감사하겠습니다.. http://boj.kr/b024bff359c64a679143f2c6633ea8c3
https://www.acmicpc.net/source/80071421 일단 제 코드입니다. 입력 계수에 대해서 이진탐색을 모두 해보는 풀이를 생각 했습니다. 입력: N 탐색 시간: logN이 걸리니까 NlogN 시간이 걸리고 N은 백만이니, 1000000*20=2000000(이천만)이고 시간제한은 2초니까 가능하지 않나요? 시간초과가 나와서 왜 틀렸는지 피드백을 받고 싶습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/38bfd119659f450f9f4c86153c28d25d 저는 처음에 stack을 생각하고 다시 해당 stack에 존재하는 요소들을 순서대로 string에 추가하는게 힘들다고 판단되어 deque로 하였습니다. 근데 메모리 초과로 틀려서 ㅠㅠ 어떤 부분이 문제인지 궁금합니다. 항상 감사합니다.
안녕하세요 선생님 🙂 선생님께서 알려주신대로 무식하게 풀 수 있는 방법부터 생각하는건 되기 시작했는데요, 아직 시간복잡도까지 고려하는 수준은 아닌가 봅니다 ㅠㅠ 강의를 듣고 아래의 방식의 시간복잡도가 굉장히 커진다는 것은 이해를 했습니다. 그래도 출력 값이 정답이라고 생각을 했는데요, 디버깅을 해보니 2중 for문을 사용하는 부분에서 i가 1인 경우를 인식하지 못하고 바로 i가 2인 경우로 넘어가지더라구요. 그러다보니 첫 번째 테스트케이스는 올바른 답으로 출력이 되지만, 두 번째 테스트케이스는 오답이 나오고 있습니다. 한참을 봐도 제가 무엇을 실수한건지 잘 모르겠습니다..ㅠ 조언 부탁 드립니다 :) https://www.acmicpc.net/source/share/65830377ec624e879c48d979af5762d4