묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-C 질문
안녕하세요 큰돌 선생님 좋은 강의 감사합니다 문제를 복습하다 질문이 생겼는데요, int &ret = d[y][x]; if (ret) return ret; check[y][x] = 1;이 부분에서 check[y][x] = 1; 이 코드가 위의 두 줄의 코드보다 먼저 나오면 왜 틀리는건가요?제가 처음 코드를 작성했을때 check[y][x] = 1; int &ret = d[y][x]; if (ret) return ret;이런식으로 작성했다가 바로틀렸다고 나와서, 고민하다가 선생님 코드와 비교해보니 이 부분에 차이가 있어서 고쳐서 맞았습니다. 해당 y, x 지점에 dp의 값이 있다하더라도 그 값을 사용하는것 맞지만 방문하는것도 맞으니 상관없다고 생각했는데 혹시 어떤 부분이 잘못된 생각인가요?
-
해결됨코딩테스트 [ ALL IN ONE ]
강의 자료에 대해서 질문 있습니다.
안녕하세요! 노션 공유를 받았는데 ([EBook] 개발자 취업 비밀노트) << 이 교재에 대해서 공유를 받았습니다. 혹시 이게 강의 교재인지 아니면 잘못 공유 받은 것 인지 궁금하여 여쭤봅니다!
-
해결됨코딩테스트 [ ALL IN ONE ]
스택으로 DFS 구현하는 방법
안녕하세요. 지금 그래프 이론 파트를 보고 있는데요! 혹시 DFS를 스택으로 구현하는 거랑 델타 탐색에 대한 부분도 강의에 있는지 궁금합니다이론 파트 먼저 보고 문제 푼 후에 풀이 영상 보려고 남겨뒀는데 혹시 문제 풀이 쪽에서 설명을 해주시면 미리 보고 정리해두고 싶어서요
-
해결됨코딩테스트 [ ALL IN ONE ]
트리 구현 방식에 대한 질문
안녕하세요.트리를 클래스로 구현하는 것과 배열로 구현하는 것에 차이가 있나요? 이제 막 코딩테스트를 처음 공부하고 있는데 구현 방법에 따라서 활용도가 어떻게 다른지 궁금합니다.제가 짧게 혼자 공부햇을 때에는 배열로 트리를 만들고 인덱스를 기준으로 부모와 자식을 찾아가는 방식으로 공부했는데요.강사님 강의를 들어보니 클래스로 구현하는게 훨씬 직관적으로 보여서요.이런 구현 방식들이 각각 어떻게 장단점이 있는지 궁금합니다.제가 정리하기로는 배열은 완전 이진 트리만 구현이 가능하고 부모와 자식을 찾아가기에 용이하다... 클래스 형식으로 트리를 구현하면 루트부터 시작할 때 용이하다...라고 정리를 햇는데 잘 이해하고 있는 건가요?배열로 트리를 구현하게 되면 bfs랑 dfs 탐색을 할 때에도 인덱스를 타고 타고 넘어가도록 코드를 작성하면 되나요?그리고 용어들이 조금 헷갈리는데 연결리스트로 트리를 구현하는 방식이 클래스로 구현하는 것과 같은 의미인가요..?
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
이모스 관련 질문
안녕하세요. 선생님!백준 17611번 코드를 아래와 같이 작성했는데, 계속 고쳐봐도 "틀렸습니다"만 돌아와서 질문 남깁니다...코드가 너무 더러워서 최대한 주석을 달아봤는데.. 이해하시는 데 도움이 됐으면 하는 마음입니다 ㅠㅜfrom collections import defaultdict import sys input = sys.stdin.readline # input n = int(input()) arr = [] min_x, min_y = sys.maxsize, sys.maxsize dicH, dicV = defaultdict(list), defaultdict(list) for _ in range(n): x, y = map(int, input().split()) # 꼭지점 입력 dicH[x].append(y) # 수평으로 선분을 위치한다고 생각하고 그래프를 시계방향으로 90도 돌렸을 때 높이마다 존재하는 선분의 양 꼭지점을 모아둔 리스트 dicV[y].append(x) # 수직으로 선분을 위치한다고 했을 때, 높이마다 존재하는 선분의 양 꼭지점을 모아둔 리스트 min_x, min_y = min(min_x, x), min(min_y, y) # 높이마다 꼭지점을 정렬 for key in dicH: dicH[key] = sorted(dicH[key]) for key in dicV: dicV[key] = sorted(dicV[key]) # 누적합을 할 리스트 생성 prefixX, prefixY = [0 for _ in range(1_000_001)], [0 for _ in range(1_000_001)] # 이모스 적용 for key in dicH: length = len(dicH[key]) # 각 높이마다 꼭지점의 개수를 구하고 temp = 0 while temp < length - 1: # 꼭지점을 두 개씩 짝지어 1과 -1 추가 prefixY[dicH[key][temp] - min_y] += 1 # 누적합 리스트에 값을 올바른 위치에 추가하기 위해 min_y를 빼 시작점이 0이 되도록 함 prefixY[dicH[key][temp + 1] - min_y] -= 1 temp += 2 # 완료하면 두 칸 이동 for i in range(1, 1_000_001): prefixY[i] += prefixY[i - 1] for key in dicV: length = len(dicV[key]) temp = 0 while temp < length - 1: prefixX[dicV[key][temp] - min_x] += 1 prefixX[dicV[key][temp + 1] - min_x] -= 1 temp += 2 for i in range(1, 1_000_001): prefixX[i] += prefixX[i - 1] h = max(prefixY) v = max(prefixX) print(max(h, v))
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
맥북 m1 세팅 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 오류가 뜨면 다음과 같이 진행하라고 하셨는데 정확하게 어디에 a.cpp를 삽입해야하는지 이해가 잘 되지 않습니다. 해당 경로로 이동 후 파일을 만들면 되는걸까요?(mkdir a.cpp)
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
제가 공부한 내용을 블로그에 기록하고 싶습니다.
안녕하세요 선생님. 제가 요즘 공부하는 것을 블로그(velog)에 기록하고 있는데 블로그 공유 관련 글을 찾아보니까 문제를 통으로 올리는 건 불가능하지만 소스코드를 올리는 건 괜찮다고 답변해 주신것을 보았습니다. 저 또한 문제를 올리지는 않고 문제 대충 설명한 후에 소스코드의 대한 해석을 기록하고자 하는데 괜찮을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-L 질문
저는 Combination을 썼을때 이중 반복문을 사용해야되니까 시간복잡도가 클거라 생각해서 two sum 을 재귀함수를 통해 구현해서 문제를 풀었습니다. 백준에 문제를 제출했을때 8ms 가 나오긴했는데 일반적으로 어떤 방법이 더 효율적인지 여쭤보고 싶습니다.
-
미해결[입문편] 안드로이드를 위한 코틀린(Kotlin) 문법
9:20초 쯤 나오는 init은 클래스안에서 공통으로 쓰이는 건가요?
안녕하세요 복치님!왕초보 강의듣고 기본기를 쌓고싶어서 입문강의도 듣고 있습니다initTest()안에 init은 클래스를 실행하면 무조건 실행되는 함수인건가요? 그리고 init이라는 함수가 실행 순서상 우선적으로 실행되는건지도 궁금합니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
[2468번] segmentation fault
// Online C++ compiler to run C++ program online #include <bits/stdc++.h> using namespace std; // 많은 비가 내렸을 때 물에 잠기지 않는 안전한 영역이 최대로 몇 개가 만들어 지는 지를 조사하려고 한다. 이때, 문제를 간단하게 하기 위하여, 장마철에 내리는 비의 양에 따라 일정한 높이 이하의 모든 지점은 물에 잠긴다고 가정한다. // 어떤 지역의 높이 정보가 주어졌을 때, 장마철에 물에 잠기지 않는 안전한 영역의 최대 개수를 계산하는 프로그램을 작성하시오. ////입력 : // 1. 첫째 줄에는 어떤 지역을 나타내는 2차원 배열의 행과 열의 개수를 나타내는 수 N (N은 2 이상 100 이하의 정수) // 2. 둘째 줄부터 N개의 각 줄에는 2차원 배열의 첫 번째 행부터 N번째 행까지 순서대로 한 행씩 높이 정보가 입력된다. // 3. 높이는 1이상 100 이하의 정수이다. ////출력 : //첫째 줄에 장마철에 물에 잠기지 않는 안전한 영역의 최대 개수를 출력한다. int n; int arr[100][100]; int visited[100][100]; int dx[4] = {0,0,1,-1}; int dy[4] = {1,-1,0,0}; priority_queue<int> safeAreas; void dfs(int y, int x, int height){ //방문처리 visited[y][x] = true; //4방향 탐색 for(int i=0; i<4; i++){ int nx = x + dx[i]; int ny = y + dy[i]; //탐색 x 조건 if( y < 0 || x < 0 || y >= n || x >= n ) continue; // out of bound if( visited[ny][nx] ) continue; if( arr[ny][nx] <= height ) continue; //물에 잠긴 지역 // 방문 dfs(ny,nx,height); } } // find connected graphs int getSafeAreaCnt(int height){ memset(visited, 0, sizeof(visited)); int connected = 0; for(int i=0; i<n; i++){ for(int j=0; j<n; j++){ if(!visited[j][i] && arr[j][i] > height ){// 방문하지 않았고, safe area dfs(j,i, height); connected++; } } } return connected; } int main() { //입력 cin >> n; string input; int maxHeight=0; for(int i=0; i<n; i++){ for(int j=0; j<n; j++){ cin >> arr[j][i]; maxHeight = max( maxHeight , arr[j][i] ); // 1. 높이의 max 값을 구한다. } } for(int height=0; height <= maxHeight; height++){ safeAreas.push( getSafeAreaCnt( height ) ); } cout << safeAreas.top() << '\n'; } https://www.acmicpc.net/problem/2468안녕하세요 큰돌님. segmentation fault 나는데 어디서 나는지 잘 모르겠습니다 ㅠ priority queue 때문인 거 같은데 한 번 더 확인 해보겠습니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
투포인터스 알고리즘으로 푸는 방법이 제가 이해한게 맞을까요?
제가 이해한 걸로는 두개의 포인터 변수를 이용하여서 반복문을 하나를 가지고 문제를 푸는거라고 이해를 해서 아래와 같이 하나의 반복문으로 풀려고 노력했는데 해당 알고리즘이 제가 이해한 이론이 맞나요? function solution(arr1, arr2) { let answer = []; let sorArr1 = arr1.sort((a, b) => a - b); let sortArr2 = arr2.sort((a, b) => a - b); let n = sorArr1.length; let m = sortArr2.length; let p1 = (p2 = 0); while (p1 < n) { if (sorArr1[p1] === sortArr2[p2]) { answer.push(sorArr1[p1]); } p2++; if (p2 === m - 1) { p1++; p2 = 0; } } return answer; } console.log(solution([1, 3, 9, 5, 2], [3, 2, 5, 7, 8]));정답은 잘 나옵니다만... 핵심이 두개의 포인터 변수와 하나의 반복문만 사용한다 라고 기억 할려고 하는데 이게 맞을지...
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
시간초과
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 큰돌쌤! 현재 알고리즘을 공부하고 있는 학생입니다. 이 문제에서 ios_base::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL) '\n' 을 쓰지 않으면 시간초과가 나던데 이런거에 집중하는 거보다 이런 아이디어만 챙겨가면 되겠죠...? 몇몇 문제들이 이런 경우가 있던데 어떻게 공부하면 좋을지 조언을 받으려 게시판에 올립니다!
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
concat과 sort로 풀었는데 맞는지 모르겠네요
function solution(arr1, arr2) { let answer = ""; return arr1.concat(arr2).sort((a, b) => a - b); } console.log(solution([1, 3, 5], [2, 3, 6, 7, 9]));
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-I 17071번 숨바꼭질 5 질문있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 큰돌님,3-I 해설을 보다가 이해가 안가는것이 있어 질문드립니다.수빈이가 3초에 도착하고 동생이 5초에 도착하면 +1,-1 로 만날수 있다 하셨는데해당 코드에서 어떻게 구현된건지 이해가 안갑니다.turn이 시간이고 홀수짝수로 visited에 도착한 시간을 나누는데 turn이 3이면 visited[1][수빈이 위치]에 저장이 되고 nx==b에 의해 바로 break 걸려 출력이 되는것 아닌가요...?이해가 안가 횡설수설 죄송합니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드리뷰 부탁드립니다
<html> <head> <meta charset="UTF-8" /> <title>출력결과</title> </head> <body> <script> function solution(board, moves) { let answer = 0; let stack = []; for (let j = 0; j < moves.length; j++) { stack.push(board[moves[j] - 1].pop()); if (stack[stack.length - 1] === 0) { stack.pop(); } if ( stack.length >= 2 && stack[stack.length - 1] === stack[stack.length - 2] ) { stack.pop(); stack.pop(); answer += 2; } } return answer; } let a = [ [0, 0, 0, 0, 0], [0, 0, 1, 0, 3], [0, 2, 5, 0, 1], [4, 2, 4, 4, 2], [3, 5, 1, 3, 1], ]; let b = [1, 5, 3, 5, 1, 2, 1, 4]; console.log(solution(a, b)); </script> </body> </html>
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-J 다른 풀이 방법 질문드립니다.
제가 처음에 접근했던 방법은 옷의 개수가 3가지라면 3C0 + 3C1 + 3C2 + 3C3으로 입을 수 있는 모든 경우의 수를 구한 후, 같은 종류의 옷을 입은 경우의 수를 구해 빼는 방식이였는데void combi(int start, vector b){ if(b.size() == k){ print(b); return; } for(int i = start + 1; i < n; i++){ b.push_back(i); combi(i, b); b.pop_back(); } return; }이 함수를 사용해서 map<string,string>mp을 선언하고 옷의 이름과 종류 모두 입력 받아서 같은 종류의 옷을 입은 경우를 판별하여 구할 수는 없는지 여쭤보고 싶습니다.
-
해결됨코딩테스트 [ ALL IN ONE ]
제약조건으로 시간 복잡도를 구하는 방법..
안녕하세요. 코테 제약조건으로 시간 복잡도 계산하는 부분을 듣고 있는데요.10^4에 n^2을 넣으면 10^8이 된다고 하셨는데 제가 예체능 수포자여서 이 계산 방법이 잘 이해가 안됩니다. ㅠㅋ용어가 맞는지 모르겠지만... BigO로 표기했을 때의 시간 복잡도의 지수와 제한 사항으로 주어진 지수끼리의 곱이 시간 초과 때문에 8이 넘으면 안된다고 이해하면 되는건가요? 이렇게 구하는 게 맞는지...그리고 제약 조건에서 n을 구할 때 연산자 사이에 있는 조건이 n이 되는 것이고 그 n이 1이 되는지, n^2이 되는지에 따라 시간 복잡도를 따지는 건가요?시간 복잡도를 중첩 반복문으로 계산하는 정도만 공부를 해서 잘 이해가 안됩니다. ㅠㅠ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6 - F
http://boj.kr/798b9379c3254770abccef965fd8ee87몬스터 때리는 부분을 제외하면 작성해주신 정답 코드랑 유사해보이는데 어디가 잘못됐는지 잘 모르겠습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-H 질문있습니다
if(isVowel(idx)) mcnt++, scnt = 0, is_include_v = 1;else scnt++, mcnt = 0;if(mcnt == 3 || scnt == 3) flag = 1;이 부분이 제가 이해하고 있는 것이 맞는지 궁금합니다.예제 입력에 ptoui를 예를 들어보겠습니다.for문에서 ptoui라는 문자열을 알파벳 하나하나 받아주면서p -> vcnt++, lcnt = 0 => vcnt = 1, lcnt = 0t -> vcnt++, lcnt = 0 => vcnt = 2, lcnt = 0o -> lcnt++, vcnt = 0 => vcnt = 0, lcnt = 1u -> lcnt++, vcnt = 0 => vcnt = 0, lcnt = 2i -> lcnt++, vcnt = 0 => vcnt = 0, lcnt = 3 다음 if문에서 lcnt == 3이므로 flag = 1이 되고,flag = 1일 때는 not acceptable 출력.이게 맞나요???
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
배열 대신 벡터 사용 해도 괜찮나요?
int cnt[26]; 대신에 vector <int> answer (26); 를 사용했는데어떤 문제 이든지 배열 대신 벡터를 사용 했을 때 문제될 여지가 있을까요?