묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 틀린 부분을 모르겠습니다.
안녕하세요 큰돌님 틀린부분을 찾는것이 어려워 질문드립니다. 아래는 공유 코드입니다http://boj.kr/251487f67822488681eee85d4012f297 불이 퍼지지 못하거나 없는경우를 처리해주지 않앗을땐 61%가 나왔는데처리해주고나서 바로 틀렸다 나오네요..사람들이 올려놓은 테스트 케이스도 다 잘 나오는데 어떤부분이 잘못되서 안되는건지 아무리봐도 모르겠습니다 도와주십쇼 ㅠ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-H 질문있습니다!
https://www.acmicpc.net/source/60946356이 코드의 반례를 못 찾겠습니다....1조건 2조건 3조건 차례대로 검사하고 틀리면 바로 not acceptable이 나오도록 했습니다.
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문이있습니다!!
안녕하세요 선생님 좋은 수업 제공해 주셔서 감사드리다는 말씀 드립니다.제가 작성한 코드에 문제를 못찾겠어서 질문을 드립니다.저는 stack에 문자를 쌓고 나중에 pop을 통해 빼서 '('이 나오면 cnt++를하고 아니면 빼기를 통해 마지막에 0이 나오면 yes no를 나오게 하여 작성하였습니다. 그런데 계속 no만 나와 그 이유를 알고자 합니다. 답변 부탁드립니다.
-
해결됨코딩테스트 [ ALL IN ONE ]
코테 준비기간은 얼마로 잡으면 좋을까요?
4개월정도 잡고 하려는 데 충분한 시간일까요? 아니면 더 투자 해야 하나요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이렇게 풀어도 괜찮을까요??
let solutions = (a,b,c) => {let numArr = [a,b,c]numArr.sort();return numArr[2] <= numArr[0] + numArr[1] ? 'YES' : 'NO'}
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
토마토 시간초과 질문입니다
선생님 풀이 보기 전에 두가지 방법으로 풀었는데 두 방법모두 4, 5번 input에 대해 시간초과가 나옵니다 대량 3~4초씩 걸립니다 ㅠㅠ두가지 방법 하나는 선생님 풀이와 사소한 부분을 제외하면 같은 방식이고, 다른 하나는 pair를 사용해서 level을 올리는 방식으로 했습니다. 두번째 방식 코드 올려봅니다.왜 시간초과가 생기는 것일까요..?ㅠㅠ#include<iostream> using namespace std; #include<vector> #include<algorithm> #include<queue> struct Pos { bool operator==(const Pos& other) { return y == other.y && x == other.x; } bool operator!=(const Pos& other) { return !(*this == other); } Pos operator+(const Pos& other) { Pos tmp = *this; tmp.y = tmp.y + other.y; tmp.x = tmp.x + other.x; return tmp; } int y; int x; }; Pos front[4] = { {-1, 0}, {0, 1}, {1, 0}, {0, -1}, }; int main(void) { cin.tie(NULL); ios_base::sync_with_stdio(false); freopen("in5.txt", "rt", stdin); // 파일 입력받음 int n, m; // n은 상자 세로, m은 상자 가로 cin >> m >> n; vector<vector<int>> box(n, vector<int>(m)); queue<pair<Pos, int>> q; for (int y = 0; y < n; y++) { for (int x = 0; x < m; x++) { cin >> box[y][x]; if (box[y][x] == 1) { q.push(make_pair(Pos{ y, x }, 0)); } } } int now_lv; while (q.empty() == false) { pair<Pos, int> tmp = q.front(); q.pop(); Pos now = tmp.first; now_lv = tmp.second; for (int dir = 0; dir < 4; dir++) { Pos next = now + front[dir]; if (next.y<0 || next.y>n - 1 || next.x<0 || next.x>m - 1) continue; if (box[next.y][next.x] == -1 || box[next.y][next.x] == 1) continue; box[next.y][next.x] = 1; q.push(make_pair(next, now_lv + 1)); } } for (int y = 0; y < n; y++) { for (int x = 0; x < m; x++) { if (box[y][x] == 0) { cout << "-1"; return 0; } } } cout << now_lv; }
-
해결됨자바 코딩테스트 - it 대기업 유제
sorting & thinking 7번 최소 회의실 개수
안녕하세요 강사님 자바 알고리즘 입문 강좌에 이어 이번 강좌 까지 들으며 많은 도움을 받고 있는 수강생입니다. 우선 양질의 강의를 제공해주신 것에 감사드립니다.이번 문제에서 저는 아래와 같이 코드를 작성했습니다. 자료구조 파트 마지막 문제와 유사하다고 생각했서 아래와 같이 풀었습니다. 저는 해법 영상에서와 같은 논리라고 생각하는데 혹시 논리적 오류가 있을까요? public int solution(int[][] meetings) { int answer = 0; PriorityQueue<Meeting> pq = new PriorityQueue<>(); Arrays.sort(meetings, (a, b) -> a[0] - b[0]); for (int[] meeting : meetings) { if (pq.isEmpty()) { pq.add(new Meeting(meeting[1], answer)); answer++; } else { if (pq.peek().end <= meeting[0]) { pq.add(new Meeting(meeting[1], pq.poll().room)); } else { pq.add(new Meeting(meeting[1], answer)); answer++; } } } return answer; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
17406 변수명이 겹쳤을 때 질문
안녕하세요 강사님http://boj.kr/5dfc0dabb69045c6980f9ea7c7af0072해당 코드에서 53번째 줄 Board b와 61번째 줄 int bb가 통과 전에는 둘 다 b로 선언해서 맞왜틀로 시간을 좀 썼는데요.. 코드 제출 전에 제가 디버깅할 때는 답도 잘 출력되고 따로 에러도 안 떠서 아무 문제가 없는줄 알았는데 제출할 때만 틀렸습니다가 뜨는 이유가 무엇일까요?
-
해결됨코딩테스트 [ ALL IN ONE ]
교재는 어디서 받을 수 있나요?
수강생 추가 혜택! 교재 제공(출판 전까지만)그 notion 초대 구글폼 제출했는데 거기에 적은 이메일로 보내주시나요!?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이런식으로 p1 p2를 안써도 괜찮을까요 ?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.바로 shift()로 빼주었는데 이래도 괜찮은걸까요 ? const input = `3 1 3 5 5 2 3 6 7 9`.split("\n"); let arr1 = input[1].split(" ").map((str) => Number(str)); let arr2 = input[3].split(" ").map((str) => Number(str)); function solution(arr1, arr2) { let answer = []; while (arr1.length && arr2.length) { if (arr1[0] < arr2[0]) { answer.push(arr1.shift()); } else { answer.push(arr2.shift()); } } while (arr1.length) { answer.push(arr1.shift()); } while (arr2.length) { answer.push(arr2.shift()); } return answer; } console.log(solution(arr1, arr2));
-
해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
결혼식 문제 Queue로 풀어봤습니다.
import java.util.*; class Marry implements Comparable<Marry>{ public int s; public int e; public Marry(int s, int e){ this.s = s; this.e = e; } @Override public int compareTo(Marry o){ if(this.s == o.s) return this.e - o.e; else return this.s - o.s; } } public class 결혼식 { public int solution(Marry[] slot, int n){ int answer = 1; PriorityQueue<Integer> Q = new PriorityQueue<>(); Q.offer(slot[0].e); for(int i = 1; i < n; i++){ while(Q.peek() <= slot[i].s) { Q.poll(); } Q.offer(slot[i].e); answer = Math.max(answer, Q.size()); } return answer; } public static void main(String[] args) { 결혼식 T = new 결혼식(); Scanner in = new Scanner(System.in); int n = in.nextInt(); // ArrayList<Marry> arr = new ArrayList<>(); Marry[] slots = new Marry[n]; for(int i = 0; i < n; i++){ int s = in.nextInt(); int e = in.nextInt(); slots[i] = new Marry(s, e); } Arrays.sort(slots); System.out.println(T.solution(slots, n)); } } 도착 시간이 현재 인덱스의 시작 시간보다 작거나 같을 때 해당하는 Q를 poll() 해주는 방식으로 처리했습니다.사실 저는 PriorityQueue가 아니라 그냥 Queue로 풀었는데, 둘이 결과가 상이합니다.PriorityQueue로 풀었을 때는 정답 값이 나오는데그냥 Queue로 풀었을 때는 틀린 값이 나옵니다.PriorityQueue는 우선순위 값을 먼저 반환한다는 차이가 있다는데,Queue를 사용해도 시작 시간 s 값이 같을 경우 e를 오름차순으로 설정해줬기 때문에 e가 작은 값부터 출력이 되어서 정답 값이 나와야 한다고 생각하는데 아니네요.. 계속 짱구를 굴려보는데 이유를 모르겠습니다...긴글이지만 강사님 도와주십쇼!+ 추가 ) Queue로는 해결이 안되었던 이유를 이제야 알 것 같습니다.. 피로연에 도착한 시간 s 값이 0일 때 나가는 시간 e가 76이라고 가정해보고, 다른 하객은 s 값이 75이고, 나가는 시간 e가 76일 때 Queue로 구현하여 FIFO 방식으로 처리하게 되면도착 시간 s 를 오름차순으로 정렬하기 때문에 0 10 1...0 76과 같이 Q에 저장될 것이고s = 76이 되었을 때s = 0 , e = 76인 값만 데이터가 삭제되고,s = 75, e = 76인 값은 데이터가 삭제되지 않는 문제가 발생하게 됩니다. 하지만 PriorityQueue로 구현하게 되면 e 값이 76인 모든 데이터를 삭제할 수 있게 되므로 이러한 문제를 해결할 수 있게 됩니다.혹시 맞나요..?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 확인 부탁드립니다.
function solution(m, product) { let answer = 0; let n = product.length; let cnt = 0; product.sort((a, b) => a[0] / 2 + a[1] - (b[0] / 2 + b[1])); // console.log(product); for (let i = 0; i < n; i++) { m = m - (product[i][0] / 2 + product[i][1]); cnt++; //console.log("cnt", cnt); if (product[i][0] + product[i][1] > m) break; answer = cnt; } return answer; } //콘솔에서는 cnt가 4로 나왔는데 답에서 3으로 출력이 됩니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
12100번 구조체를 사용하지 않는 코드가 가능할까요?
안녕하세요 강사님~해당 문제를 처음 풀 때 애초에 구조체를 사용할 생각을 떠올리지 못 해서 구조체 없이 강사님 코드의 rotate90 메서드와 move메서드 아이디어만 활용해서 코드를 작성해보려고 했는데 막혔습니다 ㅜ제가 생각한 접근법은 완탐으로 5번을 이동시킬 수 있는 모든 경우의 수를 체크해보려했습니다. 근데 기존 완탐 문제들과는 다르게 단순 visited = 0;하는 원복 패턴이 아니라 원복은 불가능해보이고, 원복없이 배열을 90도 회전 -> move(이동하기)까지 마치고 복사 배열을 다음 재귀함수에 넘겨주려고 했는데 그럼 move 메서드에서 배열을 변환 후 복사 배열을 리턴해줘야 되지 않나요? array는 리턴이 되는건지 검색해봐도 처음보는 코드들만 난무해서..강사님 코드는 애초에 구조체 내부 각 메서드 마지막에 memcpy를 사용하여 변환된 a 배열을 잘 보존시키는데 구조체 방식이 아니라면 이 문제를 해결할 방법이 없을까요?이렇게 아예 접근조차 못 하는 문제들은 그냥 강사님 코드보며 외우고 넘어가야하는지 이러면 실력이 느는 것인지 고민되네요 ㅜ마지막으로 해당 강의에서 move함수가 ⬆️(윗방향)으로 블록이동한다고 설명하시는데 코드는 ⬅️ 방향으로 블록이동인 것 같은데 제가 이해한 게 맞을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
재귀함수를 통한 순열 구현이 잘 이해가 가지 않습니다
순열을을 도식화 했을때swap(0, 0) swap(1 , 0) , swap(2 , 0)하고 다음과정에 permutation함수가 재귀 호출 되는데요제가 이해하기론permutation(3 , 3 , 1)permuatation(3, 3, 2)permutation(3 , 3, 3) 이 맞는거 같은데 왜permutation(3 , 3 , 1)permuatation(3, 3, 1)permutation(3 , 3, 1)이렇게 되는지 이해가 되지 않습니다 ㅠㅠ
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이 풀이도 괜찮을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 콘솔창엔 답이 나오긴 하는데 반례가 있나 싶습니다..! const input = `5 28 6 6 2 2 4 3 4 5 10 3`.split("\n"); function solution(input) { let totalMoney = Number(input.shift().split(" ")[1]); let inputNumArr = input .map((arr, index) => { if (index === input.length - 1) { return [Number(arr.split(" ")[0]) / 2, Number(arr.split(" ")[1])]; } else { return [Number(arr.split(" ")[0]), Number(arr.split(" ")[1])]; } }) .sort((a, b) => a[0] - b[0]); let count = 0; for (let i = 0; i < inputNumArr.length; i++) { let presentSum = inputNumArr[i].reduce((a, b) => a + b, 0); if (totalMoney - presentSum < 0) { break; } else { totalMoney -= presentSum; count++; } } return count; } console.log(solution(input));
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
[5-B] 메모리 초과
split를 활용했는데 47%까지 가다 메모리 초과가 발생하는데 혹시 이유가 뭔지 궁금합니다 ㅠㅠ어느 부분이 공간 복잡도를 많이 잡나요?? 재귀적으로 함수를 호출해서 그런가요?? #include <bits/stdc++.h> using namespace std; string S, bS; vector<string> split(string input, string delimiter){ vector<string> ret; long long pos = 0; string token = ""; while ((pos = input.find(delimiter))!=string::npos) { token = input.substr(0, pos); ret.push_back(token); input.erase(0, pos+delimiter.length()); } ret.push_back(input); return ret; } void go(string inputs){ if(inputs==""){cout << "FRULA"; return;} vector<string> new_str_v = split(inputs, bS); if(!new_str_v.empty()){ if(new_str_v[0] == inputs){ cout << inputs; return; }else{ string new_str = ""; for(auto i : new_str_v) new_str+=i; new_str_v.clear(); go(new_str); } } return; } int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> S >> bS; go(S); }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-H 질문합니다.
안녕하세요. 선생님강의 항상 잘 보고 있습니다.http://boj.kr/748c1be340784788af3183283cd97163배열로 prev 하신 부분을 강의 듣기전에 map으로 풀었는데 왜 틀렸는지 잘 모르겠습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-H 질문
안녕하세요 강사님 모범답안에서 몇가지 질문드립니다1. if(isVowel(idx)){ lcnt++, vcnt = 0, is_include_v = 1; }else{ vcnt++, lcnt = 0; }여기서 카운트하는 변수를 서로 바꿔도 상관 없는거죠? 밑의 코드처럼요!if(isVowel(idx)){ vcnt++, lcnt = 0, is_include_v = 1; }else{ lcnt++, vcnt = 0; }2. 위에서 int prev = -1; 선언했고 밑에 if문에서 if(i >= 1 && (prev == idx) && (idx != 'e' && idx != 'o'))이렇게 prev를 사용하셨는데요 두 코드 사이에 prev값이 증가하는 코드가 따로 없는거같은데 -1이었던 prev가 어떻게 idx값이랑 같을수가있나요? 이전값prev와 현재값idx가 같으면 동일한 문자 2개가 연속되는것이다 라는 의도는 알겠는데 어떻게 같을수가있는지 (prev == idx) 이 코드 이해가 안됩니다ㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
알고리즘 교안을 어떻게 공부해야하는지 질문드립니다.
안녕하세요. 대학교 알고리즘 대회 준비중인 고3입니다.강의에 제공하는 교안을 다운받아서 5월 초부터 지금까지 64쪽까지 하기는 했습니다 그런데앞쪽에 나오는 개념들이 아직 배우지 않았는 뒤쪽에 그 개념 설명이 있는 경우에는 제가 어떻게 공부해야 해야하는지 모르겠습니다.예를 들어 64쪽에 이터레이터 예제코드에는 push_back()이 있고 이거는 88쪽에 개념이 설명되어있습니다.또 42쪽의 split에는 백터 개념이 사용되는데 이거는 그 앞에서 배우지 않았던 거라서 이게 뭐지? 하게 되구요..이런식으로 뒤쪽에 개념 설명이 있는 것들이 앞쪽에 코드예제에 사용될 때가 있는데 이럴때는 이떻게 공부해야할까요?? 혹시나 제가 잘못 공부하고 있는게 아닌지 걱정됩니다. ㅜㅜ8월달이 대회이고, 저는 php를 조금 했고 이 강의를 처음 시작할땐 c++은 거의 몰랐었습니다.아, 그리고 글을 읽어보니 부트캠프 코딩테스트는 5주차 정도면 쉽게 하실 수 있을거라는 댓글을 보았는데 혹사 대학교 알고리즘 대회도 동일할까요? 국민대 알고리즘 대회를 준비하고 있습니다.감사합니다!!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
좌표를 2차원 배열로 나타낼때
cin >> m >> n >> k;저는 이런식으로 큰돌님과 거꾸로 해서 풀었는데요. fill(&a[0][0], &a[100][101], 1); for (int i = 0; i < k; i++) { cin >> sx >> sy; cin >> ex >> ey; ey -= 1; ex -= 1; a[sy][sx] = 0; //2,0 a[ey][ex] = 0;// 3,3 for (int j = sy; j <= ey; j++) { for (int p = sx; p <= ex; p++) { a[j][p] = 0; } } 아래 큰돌님 소스가 더 간단한 것 같아서 이해를 하려고 하는데 머리에서 쥐가나네요.. for(int i = 0; i < k; i++){ cin >> x1 >> y1 >> x2 >> y2; for(int x = x1; x < x2; x++){ for(int y = y1; y < y2; y++){ a[y][x] = 1; } } 0대신 1로 표기하는 것은 이해햇으나, 이중포문의 순서나 a[][] 에서 x,y가 어느순서로 들어가는지 사고과정을 좀 알려주시면 감사하겠습니다. } }