묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1012 - 반례를 모르겠습니다. JAVA
안녕하세요. 큰돌님 강의 잘 보고있습니다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class Main { static int[][] board; static boolean[][] visited; static int[] dy = {-1, 0, 1, 0}; static int[] dx = {0, 1, 0, -1}; static int yLen; static int xLen; static int cnt; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); StringBuilder sb = new StringBuilder(); while (n-- > 0) { int[] given = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray(); if (given[2] == 1) { sb.append(1).append(System.lineSeparator()); continue; } board = new int[given[0]][given[1]]; visited = new boolean[given[0]][given[1]]; yLen = given[0]; xLen = given[1]; for (int i = 0; i < given[2]; i++) { String[] numStr = br.readLine().split(" "); int y = Integer.parseInt(numStr[0]); int x = Integer.parseInt(numStr[1]); board[y][x] = 1; } for (int i = 0; i < yLen; i++) { for (int j = 0; j < xLen; j++) { if (!visited[i][j] && board[i][j] == 1) { dfs(i, j); cnt++; } } } sb.append(cnt).append(System.lineSeparator()); } System.out.print(sb.substring(0, sb.length() - 1)); } public static void dfs(int y, int x) { visited[y][x] = true; for (int i = 0; i < 4; i++) { int ny = y + dy[i]; int nx = x + dx[i]; if (ny < 0 || ny >= yLen || nx < 0 || nx >= xLen) continue; if (visited[ny][nx] || board[ny][nx] == 0) continue; dfs(ny, nx); } } }위 코드를 실행하면 12%, ArrayIndexOutOfBounds가 발생하는데 어떤 부분인지 알 수 있을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-a 재귀 조합 순열없이 풀어봤는데요
http://boj.kr/e2cc8079959e434fb04a9022bc8143ab솔직히 시간도 오래걸렸고 많이 비효율적인거같습니다고로 1주차부터의 공부방향이 궁금합니다먼저직접 풀어보고 선생님께서 알려주신 방법들로도 전부 풀어보고 되도록 많은풀이법을 사용해보고 최적의 풀이를 빠르게 도출해내는 방향으로 공부하면 될까요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이렇게 풀어봤는데, 시간 복잡도가 많이 증가하는 코드 일까요?
(사진)
-
미해결입문자를 위한 코딩테스트 핵심(이론과 문제풀이) [Python]
이렇게 푸는건 효율적이지 못할까요?
def solution(nums): answer = -1 count = [0] * 1001 for x in nums: count[x] += 1 for y in range(len(count)): if count[y] == 1: if answer < y: answer = y return answer안녕하세요.선생님 코드와는 두번째 for문의 구현이 조금 다른데 이런 방식도 문제 없는지 궁금합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-D 시간복잡도 질문입니다.
안녕하세요 선생님.lower_bound나 upper_bound의 경우 vector의 크기가 n이면 시간복잡도가 n일 것 같은데이 문제의 경우에for(int i = 0; i < n; i++){ auto pos = lower_bound(v.begin()~~~)~~~`}이면 시간 복잡도가 n^2로 이분탐색하는 것보다 더 클 것 같은데 맞나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-0 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.http://boj.kr/07ed32a221874496820c25211823021a선생님 안녕하세요 강의 덕분에 많은 도움을 받고 있습니다.제가 쓴 코드에서 1번으로 하면 정답이 안나오는데 이유를 잘 모르겠어서 질문을 드립니다. 비록 부족한 지식에 정보 공유 부탁 드리겠습니다
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
다익스트라에서 반대로 최장 거리를 구하는 코드에 대해 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. class Node implements Comparable<Node>{ int v; int c; Node(int v, int c){ this.v=v; this.c=c; } @Override public int compareTo(Node o) { return o.c-this.c; //최장거리를 구해야하니까 기존과 반대로 }}public class Main { public static int[] dis; public static ArrayList<Node>[] graph; public static int n,m; public static void dij(int s) { PriorityQueue<Node> q = new PriorityQueue<>(); q.offer(new Node(s,0)); dis[s] = 0; while(!q.isEmpty()) { Node tmp = q.poll(); int now = tmp.v; int nowcost = tmp.c; if(nowcost<dis[now]) continue; //기존과 반대 for(Node ob : graph[now]) { if(dis[ob.v]<nowcost+ob.c) { //기존과 반대 dis[ob.v]= nowcost+ob.c; q.offer(new Node(ob.v, nowcost+ob.c)); } } } } 만약 문제에서 최단거리가 아닌 최장 거리를 구하라면 클래스의 정렬 순서와 다익스트라 메소드를 기존과 반대로 구현하면 될까요??
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드립니다!!
안녕하세요 선생님!강의를 듣기 전에 혼자 풀어보았습니다.이중 for문으로 풀어서 시간복잡도 상으로는 좋지 않을 것 같은데 이것도 괜찮은 코드일까요? function solution(k, arr) { let answer = 0; let sum = 0; let check = 0; for (let i = 0; i < arr.length - 2; i++) { for (let j = 0; j < k; j++) { sum += arr[i + j]; check += 1; } answer = Math.max(answer, sum); sum = 0; check = 0; } return answer; } let a = [12, 15, 11, 20, 25, 10, 20, 19, 13, 15]; console.log(solution(3, a));
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
입력값만 scanf로 받았는데 백준에서는 틀렸다고 나오는데 한번봐주세요..
입력 받을때만 scanf로 문자열을 받았는데 백준에서는 틀리다고 나옵니다.한번봐주실 수 있나요?입력과 출력은 맞는걸 확인했습니다. http://boj.kr/0e2343838c434d4ea9bf1074afce3aac
-
미해결더 개발자, 인터뷰 가이드
안녕하세요. 깃발 보고 싶은데
어떻게 해야 할까요?
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
shortest_path에 대해 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. shortest path문제 풀때 다익스트라로 풀거나, 크루스칼로 풀거나 똑같은건가요??아니면 문제에서 다익스트라로 풀어야 하는지, 크루스칼로 풀어야하는지 힌트가 있나요???
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
#3-D 반례 질문
http://boj.kr/be44657dbfb64b30ace731e5969c07713-D 번 문제 질문드립니다계속해서 84%에서 틀렸다고 해서 많은 반례들을 넣어봤는데도 해결이 되지 않아 질문드립니다. 제가 풀이한 방식은 우선 선생님처럼 사람 visited 배열, 불 visited 배열 두가지를 만들어 따로 처리해주었고, 하나의 queue를 이용하여 먼저 불을 넣고 그 다음 사람을 넣어서 while 루프를 돌려서 최단거리를 찾았습니다.만약 사람이 이동하는 곳에 불이 이미 있으면 이동하지 않고, 불이 없고 벽도 없을경우 이동하고 만약 이동한 곳이 가장자리이면 탈출하여 최단거리를 출력하는 방식입니다. 또한 bfs이므로 가장 처음 나오는 답이 최단거리라 판단하여 곧바로 break를 걸고 출력하였습니다.
-
미해결코딩테스트 [ ALL IN ONE ]
직장인 취미 코딩
안녕하세요. 수고많으십니다.현재 코딩과 전혀 관련없는 직종으로 일하고있습니다. 취미정도로 배운지 1달정도 되었습니다. 오늘 cos pro 1급 파이썬 시험을 봤는데 너무 어렵더라구요. 기출 문제 위주로 나온다고해서 외워서 갔는데 전혀 다른 문제들이 나와서 당황했습니다..제가 지금 신청한 강의 꾸준히 익혀서 마스터하면 엥간한 문제들 푸는데 지장 없는지 궁금하네요.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-h
선생님 수업 잘듣고있습니다. 다름이 아니라 선생님께서 푸신 방법 말고 if(!visited[next]){ q.push(next); visited[next]=visited[now]+1; cnt[next]+=cnt[now]; v[next].push_back(now); }이런식으로 인접 리스트를 만들어서 구현을 해보고싶은데 계속해서 에러가 발생됩니다. 도와주실 수 있으신가요? 감사합니다
-
해결됨코테 출제자가 알려주는 [코딩 테스트 with 파이썬]
upper_bound : int) -> int:
안녕하세요 강사님이분탐색-1의 def calculate_needed_budget(upper_bound:int ) -> int: 에서 upper_bound : int) -> int: 이 부분이 이해가 안갑니다.상한금액이 정수면 정수로 나오게 하라는건가요..?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션1-8 일곱난쟁이 문제 질문
안녕하세요. 강의 코드와 결과가 이해가 되지 않아 질문드립니다. for (let i = 0; i < 8; i++) { for (let j = i + 1; j < 9; j++) { if (sum - (arr[i] + arr[j]) === 100) { arr.splice(j, 1); arr.splice(i, 1); } } }중첩 for문 중에서 내부에서 조건문을 사용해서 참일 경우 배열에 splice를 통해 요소를 제거를 해주는 코드에서 의문이 생겼습니다.중첩 for문이기 때문에 외부 for문에서 i=0 으로 시작하여 내부 for문으로 이동j=i+1 이므로 배열의 0번째 인덱스 요소를 기준으로 1번째 인덱스 요소부터 j<9 요소까지 탐색탐색 중 if (sum - (arr[i] + arr[j]) === 100) 조건에 참인 요소가 있다면 splice 메서드를 통해 제거, j<9 요소까지 탐색을 마쳤다면 내부 for문 종료다시 외부 for문으로 이동하여 i=1 로 증감 후 다시 내부 for문 실행..저는 이와 같은 절차를 가진다고 생각하는데요, 3번 절차에서 조건에 참인 요소가 있다면 splice 메서드를 통해 제거가 되므로 21과 19가 제거 되는것은 이해가 되는데 왜 15와 25까지 함께 제거가 되는지 의문입니다! 21과 19가 제거된 상태라면 (sum - (arr[i] + arr[j]) === 100) 조건에 참일 수가 없을 거 같아서요.결론은 중첩 for문인데 21과 19 그리고 15와 25까지 함께 제거가 되는지 의문입니다!감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 질문있습니다
안녕하세요, 큰돌님강의와 비슷한 로직인것 같은데, 메모리초과 되어 질문합니다!메모리초과가 나는 이유를 모르겠습니다ㅣ. K가 10일때, 2^1024만큼 go함수를 호출해서 틀린건가 싶기도 합니다...
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
해당 풀이의 런타임 질문드립니다
안녕하세요.해당 문제와 유사한 문제를 찾아서 복습을 하고 있었는데, 런타임 에러라고 뜨는데요, 무엇이 문제인지 확인 부탁드려도 될런지요.인프런은 아니고 해당 문제와 유사한 문제를 찾아풀고 있던 타사이트라고, 송구스러운데요.참고로 제 브이에스코드를 이용했을 땐 콘솔에 답이 출렵됩니다. 다만 해당 사이트에서 풀때는 런타임에러라고 합니다.강사님 풀이와 동일하게 풀었는데, 제가 무엇을 놓쳤는지 궁금해서 문의드려봅니다.https://leetcode.com/problems/merge-two-sorted-lists/description/ var mergeTwoLists = function(list1, list2) { let answer = []; let n = list1.length; let m = list2.length; let p1 = (p2 = 0); while (p1 < n && p2 < m) { if (list1[p1] <= list2[p2]) answer.push(list1[p1++]); else answer.push(list2[p2++]); } while (p1 < n) answer.push(list1[p1++]); while (p2 < m) answer.push(list2[p2++]); return answer; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
[2-D] 답안 관련 질문
안녕하세요. 강사님2-D 답안을 보면서 질문이 있습니다.해설 강의에서 설명한 DFS 반환값 설정과 DFS 로직은 이미 이해한 상태에서 해당 문제를 접했는데요.제가 답안을 보고 수정 및 작성한 코드는 아래입니다./* 답 : http://boj.kr/9815cd371fe643f59ac17a410e0cfca4 */ #include <bits/stdc++.h> using namespace std; int M, N, K; int m[104][104]; bool visited[104][104]; vector<tuple<int, int, int, int>> c; int dx[4] = {1, 0, -1, 0}; int dy[4] = {0, 1, 0, -1}; int dfs(pair<int, int> node) { int count = 1; visited[node.first][node.second] = true; for(int i = 0; i < 4; i++) { int nx = node.first + dx[i]; int ny = node.second + dy[i]; if(nx < 0 || nx >= N || ny < 0 || ny >= M) continue; if(!m[nx][ny] && !visited[nx][ny]) count += dfs({nx, ny}); } return count; } int main(void) { cin >> M >> N >> K; for(int i = 0; i < K; i++) { int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; c.push_back({x1, y1, x2, y2}); } fill(&m[0][0], &m[0][0] + 104 * 104, 0); for(int i = 0; i < N; i++) for(int j = 0; j < M; j++) for(int k = 0; k < K; k++) if(get<0>(c[k]) <= i && i < get<2>(c[k]) && get<1>(c[k]) <= j && j < get<3>(c[k])) m[i][j] = 1; // for(int i = 0; i < N; i++) // { // for(int j = 0; j < M; j++) // cout << m[i][j]; // cout << '\n'; // } int component = 0; vector<int> area; for(int i = 0; i < N; i++) for(int j = 0; j < M; j++) if(!m[i][j] && !visited[i][j]) { component++; area.push_back(dfs({i, j})); } sort(area.begin(), area.end()); cout << component << '\n'; for (int i = 0; i < area.size(); i++) cout << area[i] << ' '; cout << '\n'; return 0; }저는 강사님과 약간 다르게 코드를 작성했는데 강사님의 이해를 돕기 위해 다른 점을 살짝 설명드리면해당 문제 예시 그림에서 시계 방향으로 90도 회전한 상태라고 가정하고 진행을 했습니다. 그래서 x, y 위치가 반대고 각 이중 for 문의 첫 for 문 내 조건문 표현식에서 N 을 사용합니다.미리 영역 좌표를 받고 int 형 데이터 4개를 가지고 있는 튜플을 사용했는데요. 제가 안되는 부분은 바로 해당 튜플을 가지고 영역을 표시할 때 입니다. for(int i = 0; i < N; i++) for(int j = 0; j < M; j++) for(int k = 0; k < K; k++) if(get<0>(c[k]) <= i && i < get<2>(c[k]) && get<1>(c[k]) <= j && j < get<3>(c[k])) m[i][j] = 1;중요한건 오른쪽 위 좌표에 대해서 검사를 할 때 등호를 포함시키지 않는게 답을 위한 중요한 부분이였는데요. 이 부분이 이해가 가질 않습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-C질문입니다
cnt[100]이 아닌 cnt[104]를 사용하는 이유가 궁금합니다.