묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨코딩테스트 [ ALL IN ONE ]
강의 교재 부탁드려요
안녕하세요. 강의 너무 잘 보고 있습니다.교재 공유 요청 했는데 확인 한번 부탁드리겠습니다~!구글폼에 접수한 메일에는 아무것도 안와있어서요.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
바둑이 승차 질문입니다!
package other.study; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; import static java.lang.Integer.MIN_VALUE; import static java.lang.Math.max; import static java.lang.System.in; // todo: 해결 필요!! public class Main3 { static int[] ch = new int[100000000]; static int c, n, answer = MIN_VALUE; public static void main(String[] args) { Scanner kb = new Scanner(in); c = kb.nextInt(); n = kb.nextInt(); ch = new int[n]; int[] arr = new int[n + 1]; for (int i = 0; i < n; i++) { arr[i] = kb.nextInt(); } // DFS(0, 0, arr); BFS(0, arr); System.out.println("answer = " + answer); } static void DFS(int L, int sum, int[] arr) { if (sum > c) return; if (L == n) { answer = max(answer, sum); } else { DFS(L + 1, sum + arr[L], arr); DFS(L + 1, sum, arr); } } static void BFS(int L, int[] arr) { Queue<Node> Q = new LinkedList<>(); Q.offer(new Node(0, arr[0])); while (!Q.isEmpty()) { int len = Q.size(); for (int i = 0; i < len; i++) { Node tmp = Q.poll(); if (tmp.weight > c) continue; if (L == n) { answer = max(answer, tmp.weight); } else { Q.offer(new Node(tmp.level + 1, tmp.weight + arr[tmp.level + 1])); Q.offer(new Node(tmp.level + 1, tmp.weight)); } } System.out.println(); L++; } } static class Node { private int level, weight; public Node(int level, int weight) { this.level = level; this.weight = weight; } } }안녕하세요 선생님!명품 강의 정말 잘 듣고 있어요! 바둑이 승차를 BFS로도 풀어봤는데, 문제되는 부분이 있을까해서 질문 드립니다! 늦었지만 새해 복 많이 받으세요!
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드의 시간 복잡도에 대해 궁금합니다!
function solution(str, t) { let answer; const counts = {}; const formatted = [...str]; formatted.forEach((char, i) => { if (counts[char]) { return counts[char].push(i); } counts[char] = []; counts[char].push(i); }); const tIndexs = counts[t]; answer = formatted.reduce((store, cur, i) => { const tmp = []; tIndexs.forEach((index) => { tmp.push(Math.abs(index - i)); }); store.push(Math.min(...tmp)); return store; }, []); return answer.join(' '); } let str = 'teachermode'; console.log(solution(str, 'e')); 입력값의 크기 N마다 tIndex만큼 반복하니까 O(N^2) 인지아니면 O(N)의 시간복잡도를 갖는지 궁금합니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
쇠막대기 풀이 질문
안녕하세요, 첫번째 else 문에서 바로 pop을 해줘도 오류가 나지 않는 이유, 두번째 if문에서 stack.isEmpty() 체크를 해주지 않는 이유가 무조건 처음 한번은 '(' 괄호가 들어가기 때문인가요? for (int i = 0; i < arr.length; i++) { if (arr[i] == '(') stack.push(arr[i]); else { stack.pop(); if (arr[i - 1] == '(') answer += stack.size(); else answer++; } } import java.util.*; public class Main { public int solution(String str) { int answer = 0; Stack<Character> stack = new Stack<>(); char[] arr = str.toCharArray(); for (int i = 0; i < arr.length; i++) { if (arr[i] == '(') stack.push(arr[i]); else { stack.pop(); if (arr[i - 1] == '(') answer += stack.size(); else answer++; } } return answer; } public static void main(String[] args) throws Exception { Main T = new Main(); Scanner kb = new Scanner(System.in); String str = kb.next(); System.out.println(T.solution(str)); } }
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰
안녕하세요 강의 듣기 전에 혼자서 풀어보았는데 다음 코드도 가능할까요 ?function solution(s, arr) { let answer = Array.from({ length: s }, () => 0); for (let i = 0; i < arr.length; i++) { let p = answer.indexOf(arr); if (p > -1) { let tmp = arr[i]; for (let j = p; j > 0; j--) { answer[j] = answer[j - 1]; } answer[0] = tmp; } else { for (let j = answer.length - 1; j >= 0; j--) { if (answer[j] === 0 || j === answer.length - 1) continue; let tmp = answer[j]; answer[j + 1] = tmp; } answer[0] = arr[i]; } } return answer; }
-
해결됨SQL 코딩테스트를 위한 마지막 걸음
lag, leag 강의에서 game-play-analysis-iv 문제
https://leetcode.com/problems/game-play-analysis-iv/ 이 문제를 풀고 있는데,제가 작성한 코드는 SELECT ROUND(COUNT(player_id) /(SELECT COUNT(DISTINCT player_id) FROM Activity),2) as fractionFROM( SELECT player_id, LAG(player_id) OVER (ORDER BY player_id) AS prev_id, LAG(event_date) OVER (ORDER BY player_id) AS prev_date, event_date, RANK() OVER (PARTITION BY player_id ORDER bY event_date) AS rnk FROM Activity) AWHERE rnk = 2AND DATE_ADD(prev_date, INTERVAL 1 day) = event_date AND player_id = prev_id입니다. 이 코드로 정답을 체크해 보았을 때 wrong answer라 뜨지만, A FROM절 안에서 event_date, rnk의 순서를 LAG 앞으로 바꾸어 주었을 땐 정답 처리가 되었습니다. 왜 그런걸까요??아래는 순서를 바꿨을 때 정답처리 되었던 코드 입니다.SELECT ROUND(COUNT(player_id) /(SELECT COUNT(DISTINCT player_id) FROM Activity),2) as fractionFROM(SELECT player_id, event_date, RANK() OVER (PARTITION BY player_id ORDER bY event_date) AS rnk, LAG(player_id) OVER (ORDER BY player_id) AS prev_id, LAG(event_date) OVER (ORDER BY player_id) AS prev_dateFROM Activity) AWHERE rnk = 2AND DATE_ADD(prev_date, INTERVAL 1 day) = event_date AND player_id = prev_id
-
미해결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]을 할당하지 않기 위해서 이렇게 조건을 쓰신것 같은데요 조건식같은경우는 일단 할당된것이 하나밖에 없으니깐 처음과 끝이같다 그래서 참이다가 맞나요?그런데 그렇게되면 할당을 한것이랑 똑같지 않나요?