묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 9996번 질
안녕하세요 큰돌님 강의 잘 듣고 있습니다. 1-G번 문제 질문드립니다.https://www.acmicpc.net/source/share/7c68255b14c740b9b87c4053d0d0c0db왜 자꾸 틀렸다고 하는지 모르겠네요 ㅠ 강의 듣고 사이즈 예외처리까지 다 된건 줄 알았는데 if ((input.find(temp1) != string::npos) && (input.find(temp2) != string::npos)) { cout << "DA" << '\n'; } else { cout << "NE" << '\n'; }이 부분이 왜 오류나는지 알 수 있을까요? 감사합니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
11.문자열 압축 문제 결과가 맞게 나오는거 같은데 채점사이트에서 오답이라고 합니다. 피드백 주시면 감사하겠습니다.
import java.util.*; public class Main { public String solution(String str){ StringBuilder answer = new StringBuilder(); char [] tmp = str.toCharArray(); int dis_Count = 1; for(int i=0; i<tmp.length; i++){ //연속으로 들어올때 if(i>0 && tmp[i]== tmp[i-1]){ dis_Count++; } //연속으로 들어오다 끊길 때 else if(i>0 && tmp[i]!= tmp[i-1]){ if(dis_Count > 1){ answer.append(dis_Count); dis_Count = 1; } } if(dis_Count == 1){answer.append((tmp[i]));} } return answer.toString(); } public static void main(String[] args) { Main Main = new Main(); Scanner kb = new Scanner(System.in); String str = kb.next(); System.out.println(Main.solution(str)); } }
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이런식으로 풀어도 될까요?
indexOf를 사용했습니다.const Sol7 = () => { const s = "CBA"; const sub = "CBDAGE"; const solution = (s, sub) => { let answer = "YES"; let queue = s.split(""); for (let j = 0; j < sub.length; j++) { let subArr = sub.split(""); if (queue.includes(subArr[j])) { if(queue.indexOf(subArr[j]) !== 0) return answer = "NO" queue.shift(); } } return answer; }; console.log(solution(s, sub)); return <div></div>; }; export default Sol7;
-
미해결Do it! 알고리즘 코딩테스트 with C++
백준 13023 질문있습니다.
문제의 의도가 파악이 되지 않아 질문 남깁니다.모든 노드에서 DFS를 돌리는경우도 유튜브 채널 댓글 보면서 이해를 했습니다.위의 설명을 보니 이해가 바로 되었습니다.근데 문제에서 A는 B와 친구다.B는 C와 친구다.C는 D와 친구다.D는 E와 친구다.라는 것을 보고 깊이가 4일 때를 하드코딩으로 코드에 넣으셨는데 저는 이것을 보고 그냥 DFS로 n -1번까지 다 연결되어 있으면 1을 출력하라는 것이구나~ 하고 이해를 하였는데 어디에 근거하여 깊이가 4인 경우가 발생하면 1을 출력하라고 어떻게 이해하셨는지 궁금합니다. #include <iostream> #include <vector> #include <queue> #include <algorithm> #include <deque> #include <cmath> using namespace std; #define ll long long #define endl "\n" int n; bool flag = false; vector<vector<int>> adj; vector<bool> visit; void DFS(int now, int depth) { visit[now] = true; if (depth == n - 1) { flag = true; return; } for (int next : adj[now]) { if (visit[next] == false) DFS(next, depth + 1); } visit[now] = false; } int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int m; cin >> n >> m; adj.resize(n); visit.resize(n); for (int i = 0; i < m; ++i) { int a, b; cin >> a >> b; adj[a].push_back(b); adj[b].push_back(a); } for (int i = 0; i < n; ++i) { DFS(i, 0); if (flag) break; } if (flag == false) cout << 0; else cout << 1; return 0; }위는 제가 처음에 짠 틀린 코드입니다. DFS의 조건문에서 depth가 n - 1과 같으면 flag를통해 return하도록 하였습니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션 2. 1, 2차원 배열 탐색 - 1번문제
섹션 2. 1, 2차원 배열 탐색 - 1번문제 앞의 숫자보다 크면 출력하는건데 let arr=[7, 3, 9, 5, 6, 12];arr이 이럴때, 7앞부분엔 아무것동 없는데 정답 출력에 왜 7이 들어가는지 잘모르겠어서요.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
긍정왕 홍철이 문제 질문입니다.
문제를 보고 아래와 같이 풀었으나// Online C++ compiler to run C++ program online #include <bits/stdc++.h> using namespace std; const int n = 3; //4방향 이동 int dy[4] = { -1, 0, 1, 0 }; int dx[4] = { 0, 1, 0, -1}; int visited[n][n]; vector<int> v; //기본 맵 int a[3][3] = { {10,20,21}, {70,90,12}, {80,110,120} }; void print() { for(int i : v) { cout << i << " "; } cout << "\n"; } // 완탐 재귀 함수 void go(int y , int x) { //기저 조건 if( y == n-1 && x == n-1 ) { print(); return; } for(int i = 0; i < 4; i ++) { int ny = y + dy[i]; int nx = x + dx[i]; //범위 체크 if( ny < 0 || ny >= n || nx < 0 || ny >= n ) continue; if( visited[ny][nx] ) continue; visited[ny][nx] = 1; //방문 처리 v.push_back(a[ny][nx]); go(ny, nx); visited[ny][nx] = 0; //원복 v.pop_back(); } } //완탐과 원복 : 예제_ 긍정왕 홍철이의 구걸 여행행 int main() { visited[0][0] = 1; v.push_back(a[0][0]); go(0,0); return 0; } 출력이 위와 같이 0이 껴서 이상하게 나옵니다. 큰돌님 코드와 비교해 봤는데 다른 점을 못찾겠어요ㅜㅜ 제가 실수한 것이 있을까요??
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
이중 연결 리스트 AddNewNode 함수 질문
안녕하세요! 항상 좋은 강의 만들어주셔서 감사합니다! 강의 완강 후 복습하며 자료구조 구현 중에 질문이 있습니다. 이중 연결 리스트 구현 중 새로운 노드를 추가한 뒤, 앞뒤 노드의 pPrev와 pNext를 바꿔주는 과정에서 처음에는 pPrevNode를 새로 정의하지 않고 주석 처리한 부분으로 앞 노드와 관계를 정리했는데, 이렇게 하니 이전 노드의 pNext의 값이 pNewNode의 주소로 제대로 바뀌지 않는 것 같았습니다. 혹시 이렇게 되는 이유가 궁금합니다
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
[질문은 아니고 해결법&코드 공유] deque로 풀어봤어요!
저는 37번 LRU 문제를 Deque랑 삽입 정렬로 풀었습니다.삽입 정렬은 강사님 설명대로 반복된 입력값을 정렬시킬 때 사용했습니다. deque는 캐시메모리 크기를 초과할 때 pop(제거)를 위해 사용했습니다. 처음에는 vector로 풀었는데, 이럴 경우입력값 : 1 2 3 2 6 2 3 5 7index :0 1 2 3 4vector<int> v :1 6 2 3 5에서 처음 입력됐던 1이 삭제돼야하는데, vector는 pop_back()만 있어서 앞쪽인 1이 아니라 뒤쪽인 5가 삭제됩니다. 그래서 pop_front() 혹은 pop_back()랑 push_front가 동시에 컨테이너가 없을까 찾아보다가, 양방향 입력/제거 가능한 deque를 사용했습니다!(queue도 앞으로 들어오고 뒤로 나가는 거지만 정렬하기 힘드니까 패스!) 아래 코드 첨부합니다!최근에 해시 공부하면서 익힌 iterator(반복자)도 사용했는데, iterator가 처음이신 분들은 대충 index처럼 요소 접근하는걸로 이해해주시면 됩니다!(정확히는 주소 접근이지만!) #include<iostream> #include<deque> #include<algorithm> using namespace std; int main() { int S{}, N{}; deque<int> dq; // 중복 값 정렬 cin >> S >> N; for (int i = 0; i < N; i++) { int tmp{}; cin >> tmp; // 중복값 찾기 deque<int>::iterator it = find(dq.begin(), dq.end(), tmp); if (it == dq.end()) dq.push_front(tmp); // 중복 없으면 그냥 앞에서 삽입 else { // 중복값 있다면 // (tmp = *it을 할 필요없음 : 그 값이 그 값이니까) // 하나씩 뒤로 밀기. 제일 앞쪽에 도착하면 it-1을 못하니까 반복 종료 for (it; it != dq.begin(); it--) { *it = *(it - 1); } *it = tmp; } // 제일 뒤쪽 삭제 if (dq.size() > S) dq.pop_back(); } for (int i = 0; i < dq.size(); i++) cout << dq[i] << " "; }
-
미해결입문자를 위한 코딩테스트 핵심(이론과 문제풀이) [Python]
카드 점수 정확성 테스트 경우의 수 문의
안녕하세요 선생님 그리디 카드점수 문제 경우의수 문의입니다.입출력 예에서 nums 리스트에2, 3, 7, 1, 2, 1, 5 에서 왼쪽 맨카드나 오른쪽 끝 카드 중 둘 중하나만 가져갈 수 있다고 가정하고 가져갈 수 있는 카드의 개수 K가 주어졌을때 K가 4 라면 경우의수가 5개 밖에 나오지 않는다고 강의를 들었는데 5가지 말고 더 나오지 않은가 해서 문의드립니다.1: 2,3,7,12: 2,7,1,23: 2,2,1,54: 2,1,2,15: 2,3,1,26: 2,3,1,57: 1,2,1,5이 말고도 4가지 카드를 뽑을 수 있는경우의수는 조금더 나오질 않나요? 제가 잘못 이해하고 있는지 문의드립니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이렇게 풀어도 괜찮은걸까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. function solution(arr) { let answer = arr; for (let i = 1; i < arr.length; i++) { for (let j = 0; j < i; j++) { if (arr[i] < arr[j]) { arr.unshift(arr[i]); arr.splice(i + 1, 1); } else { if (arr[i] < arr[j + 1]) { arr.splice(j + 1, 0, arr[i]) arr.splice(i + 1, 1) } } } } return answer; } let arr = [11, 7, 5, 6, 10, 9]; console.log(solution(arr));
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-N 1629 홀수 일 때의 처리가 이해가 되지 않습니다.
#include <bits/stdc++.h> using namespace std; long long A, B, C; long long go(long long a, long long b) { if (b == 1) { return a % C; } long long ret = go(a, b / 2); ret = (ret * ret) % C; if (b % 2 == 1) { ret = (ret * a) % C; } return ret; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> A >> B >> C; cout << go(A, B) << '\n'; }B가 홀 수 일 때, 홀수 처리를 하기 직전ret = A^(B-1) % C 입니다.그러면 홀수처리가 진행 될 때ret = ((A^(B-1) % C) * A) %C 가 코드의 상황 인데 이게 최종 결과인 A^B % C 와 같아지는게 이해가 안됩니다. 나머지 연산의 합동공식이(a * b) % c = (a % c * b % c) % c 이기 때문에 A^B % C= (A^(B-1) * A) % C= (A^(B-1) % C * A % C) % C위와 같은 식이 나와야 하고 ret = (ret * a) % C가 아니라ret = (ret * a % C) %C 가 되어야 하는 것 아닌가요? 백준에서는 둘다 맞게 처리 되는데 이해가 되지 않습니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
강의보기전 직접 풀 수 있는 문제 오랜만입니다. ㅠㅠ
이전 2문제에 비해 다소 쉬웠습니다.function solution(cards, orderNum) { let answer = []; let n = cards.length; // n개 카드수에서 3개를 더한 합의 값이 제일 큰 순서대로 나열 // k번째로 큰 수를 리턴 for (let i = 0; i < n; i++) { for (let j = 0; j < n; j++) { if (i === j) continue; for (let z = 0; z < n; z++) { if (i === z) continue; if (j === z) continue; answer.push(cards[i] + cards[j] + cards[z]); } } } answer = answer.sort((a, b) => b - a); return Array.from(new Set([...answer]))[orderNum - 1]; } const k = 3; console.log(solution([13, 15, 34, 23, 45, 65, 33, 11, 26, 42], k));
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-C 질문입니다
http://boj.kr/f816b7f59d3247c7958683ceae5d6b76선생님 안녕하세요.모든 경우의 수 마다 구역을 색칠해서 dfs가 2번호출되면 최솟값을 갱신하는 로직으로 짰습니다.테스트케이스는 다맞는데 왜 틀리는지 이유를 모르겠습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재p107
if(mp.find(1) == mp.end())이런 반복문 조건이 나오는데요 mp[1]을 할당하지 않기 위해서 이렇게 조건을 쓰신것 같은데요 조건식같은경우는 일단 할당된것이 하나밖에 없으니깐 처음과 끝이같다 그래서 참이다가 맞나요?그런데 그렇게되면 할당을 한것이랑 똑같지 않나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재 p106 질문
cout << mp[1] << '\n'; cout << mp2["aaa"] << '\n';이 코드에서요 위의 코드는 key에 1 값에 0을 저장하는 것은 알겠습니다.그리고 두번째 코드에서도 key에 aaa까지는 알겠는데 코드 실행결과를 보면 값이 %가 나와있습니다. 왜 그렇게 값이 나오는건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재p104
mp.erase("kundol"); auto it = mp.find("kundol"); if(it == mp.end()){ cout << "못찾겠네 꾀꼬리\n"; } 이 코드결과 "못찾겠네 꾀꼬리"가 실행이 되는데요 제 생각에는 kundol을 erase 했으니 mp에 find를 실행하면 kundol이 없으니깐 0을 반환해서 it이 0이되고 그리고 mp.end는 지금 key값이 3개가 있으니 인덱스값이 2가되서 if반복문이 실행이 안되야하는거 아닌가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재 p100 erase() 질문
auto it = a.begin(); it++; a.insert(it, 1000); print(a); it = a.begin(); it++; a.erase(it); print(a); 강의교재를 보시면 이러한 코드가 나오는데요 저 코드를 실행한 결과는 3 1000 2 1 1 2 3 3 2 1 1 2 3이렇게 나오는데 결론적으로 1000이 사라졌습니다.하지만 제가 생각하기에 첫번째 auto it 에서 it++때문에 it= a.begin() +1이 되고 4번째 코드에서는 원래에 있던 it에 다시 it++를 하니 it = a.begin() + 2가 되는것이 아닌가요? 그래서 3 1000 2 1 1 2 3 여기에서 처음에 나오는 2를 삭제해야하는것이 아닌가요?
-
미해결Do it! 알고리즘 코딩테스트 with C++
문제 8번 질문드립니
#include <iostream>#include <vector>#include <algorithm>using namespace std;int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int N; cin >> N; vector<int> save(N + 1 , 0); for (int i = 1; i <= N; i++) { cin >> save[i]; } sort(save.begin(), save.end()); int result = 0; for (int k = 1; k <= N; k++) { int s = 1; int e = N; while (s < e && s >= 1 && e <= N) { int temp = save[s] + save[e]; if (temp < save[k]) { s++; } else if (temp > save[k]) { e--; } else { //만약 s와 e가 k와 같아지면 안됨 if (s != k && e != k) { result++; break; } else if (s == k) s++; else if (e == k) e--; } } } cout << result << "\n";} 제가 다음과 같이 돌렸을 때 틀렸습니다라고 나오는데, 벡터에 저장할 때 0부터 저장하면 정답이라고 나오는 이유를 모르겠습니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재p94 2차원배열
vector v3[10];2차열 배열을 만드는 방법중에서 위와같은 코드로 2차열배열을 만들수 있다고 하셨습니다. 밑의 그림도 참고를 해봤는데 이해가 가지않습니다.V3[10]을 하게 되면 1차원에 10개의 공간만 생기는것이 아닌가요??
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 코드 리뷰 부탁드립니다 includes 사용하였습니다
<html> <head> <meta charset="UTF-8" /> <title>출력결과</title> </head> <body> <script> function solution(n, k, card) { let answer; let newArr = []; for (let i = 0; i < n; i++) { for (let j = i + 1; j < n; j++) { for (let k = j + 1; k < n; k++) { if (newArr.includes(card[i] + card[j] + card[k])) { continue; } else { newArr.push(card[i] + card[j] + card[k]); } } } } newArr.sort((a, b) => b - a); answer = newArr[k - 1]; return answer; } let arr = [1, 2, 3, 4]; console.log(solution(10, 3, arr)); </script> </body> </html>