묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-J k=n*j+i로 하면 식이 어떻게 될까요
세로탐색 처음에 이렇게 했는데 안되네요 인덱스가 어렵네요 ㅠㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-I 이렇게 풀었는데 코테에서 ios_base::syn~ 를 쓸 일이 있나요?
코드입니다 추가하니까 시간초과 안되고 풀렸네요#include<iostream> using namespace std; string s; int n,x,m; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n; for(int i=0;i<n;i++){ cin >> s; if(s=="add"){ cin >> x; m |= (1<<x); }else if(s=="remove"){ cin >> x; m &= ~(1<<x); }else if(s=="check"){ cin >> x; if(m&(1<<x))cout<<"1\n"; else cout<<"0\n"; }else if(s=="toggle"){ cin >> x; m ^= (1<<x); }else if(s=="all"){ m = (1<<21)-1; }else if(s=="empty"){ m = 0; } } }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-H segmentation fault 뜨는이유가
-1,0,1,00,1,0,-1이렇게 습관처럼 쓰다 이번에 걸렸네요 ㅋㅋㅋ비트마스킹에 맞춰서 했어야했네요 ㅠㅠ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-Q 2636 치즈
선생님 어떻게 하면 다르게 풀 수 있을까 생각하던 중 dfs 자체에 치즈가 있는 곳을 0으로 바꿔주면서 방문처리하면 어떨까싶은 발상으로 다르게 풀어봤는데 95%쯤에서 틀렸다고 뜨네요 어떤 반례가 있는지 도저히 못 찾겠습니다. 도와주세요ㅠㅠhttp://boj.kr/b5740f5f59ce438aa9c890edbce7aba7
-
미해결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); }