묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션7. 단지 번호 붙이기 (DFS)
안녕하세요, 강사님. 아래 제 풀이는 in3.txt에 대한 올바른 답을 반환하지 못합니다.그 이유에 대해서 알 수 있을까요? 즉 강사님의 코드와 제 코드의 차이점에 대해 좀 더 자세히 알 수 있을까요? <강사님 코드>import syssys.stdin=open("input.txt", "r")dx=[-1, 0, 1, 0]dy=[0, 1, 0, -1]def DFS(x, y): global cnt cnt+=1 board[x][y]=0 for i in range(4): xx=x+dx[i] yy=y+dy[i] if 0<=xx<n and 0<=yy<n and board[xx][yy]==1: DFS(xx, yy) if name=="__main__": n=int(input()) board=[list(map(int, input())) for _ in range(n)] res=[] for i in range(n): for j in range(n): if board[i][j]==1: cnt=0 DFS(i, j) res.append(cnt) print(len(res)) res.sort() for x in res: print(x) <제 코드>import sys sys.stdin=open("input.txt", "r") dx=[-1, 1, 0, 0]dy=[0, 0, -1, 1]# '1'인 지점으로부터 그 주위 '1'인 애들 탐색def DFS(x,y): global cnt for i in range(4): xx=x+dx[i] yy=y+dy[i] if 0<=xx<n and 0<=yy<n and board[xx][yy]==1: board[xx][yy]=0 cnt+=1 DFS(xx,yy) if name=="__main__": n=int(input()) board=[list(map(int, input())) for _ in range(n)] res=[] # 먼저 '1'인 지점을 출발점으로 삼고 DFS 호출하기 for i in range(n): for j in range(n): if board[i][j]==1: cnt=0 DFS(i,j) res.append(cnt) res.sort() print(len(res)) for x in res: print(x)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
히든퀘스트 브루트포스 질문
안녕하세요 선생님 브루트포스 히든퀘스트를 풀고 있는데요, 계속 시간초과가 떠서 질문드립니다. 재귀 완탐으로 풀었는데 시간초과가 뜨네요. 그래서 다른분들 풀이 구글링해서 봤는데 대부분 3중 for문 콤비네이션으로 해결했더라구요. 제 로직에는 문제가 없다고 생각했는데, 혹시 제 방법으로는 해결할 수 없는 문제인가요? 나름 가지치기도 했는데 안풀립니다ㅠㅠ2798 블랙잭 문제입니다http://boj.kr/22b25fa79ad74c69b0797537b4a7669f
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-D 질문있습니다 ㅠㅠ
안녕하세요 큰돌님https://www.acmicpc.net/submit/2583/65432177 제가 짠 코드 입니다.. ㅠㅜ답안지를 보고 이해 할려고 해도 이해가 되지 않아 질문 드립니다.. 저랑 배열 사이즈(m, n ,x y)가 다른 점에서 이해가 힘드네요. 저는 배열을 x y 좌표축과 똑같이 봐고 시도 해봤습니다. 그래서 궁금한 점은 3가지 입니다.어떻게 x1~x2까지 사각형을 색칠 할 때 x2는 포함하지 않으셨나요?탐색 범위 설정시에 m과 n 초과면 continue를 하는게 아닌가요?함수 호출 횟수가 넓이인게 정확하게 이해가 되지 않습니다 ㅠㅠ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
트리 문제 질문드려요
vector<int> tree[51]; int cnt, a; void go(int node) { if (tree[node].size() == 0) { cnt++; return; } for (auto& leaf : tree[node]) { if (m == leaf) continue; go(leaf); } return; } int main(void) { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n; for (int i = 0; i < n; i++) { int tRoot; cin >> tRoot; if (tRoot == -1) { a = i; continue; } tree[tRoot].push_back(i); } cin >> m; if (m == a) { cout << 0; return 0; } go(a); cout << cnt; return 0; }안녕하세요이 코드는 어떤 점에서 예외가 생겨서 틀리는 걸까요?? 혹시 루트 노드만 남았을 때가 예외일까요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-I 17071 문제 질문있습니다.
안녕하세요 큰돌님이 문제 제가 이해를 못하고 있는게 있는데요일단 결론부터 말하면info[2][500000] 처럼 배열을 2차원으로 만들어서 홀,짝 시간으로 분할해서 문제를 푸는것과그냥 info[500000]로 각 배열 요소에 시간을 기록해서 배열을 순회하면서, 홀짝 구분해서 답을 찾는거랑 무슨차이인지 잘 모르겠습니다.일단 아래 제풀이는 틀렸습니다.주어진 테스트 케이스는 맞는데백준게시판 반례들 몇개가 틀리게 나오는데요...(ex 입력 27297 339652 --> (답 : 425 , output : 426)대부분 1~2 차이로 틀립니다.이것 저것 다른 답안들이랑 비교하면서 디버깅해보면 info 배열을 구성하는과정에서 틀린게 있는것 같은데요.......위에 굵게+기울임 글씨체로 쓴 부분 처럼 1차원,2차열 두가지 배열이 정확히 어떤차이가 있는건지 잘 모르겠습니다.예를들어서, 제가 생각하기에는 2차원 배열을 통해서 홀수,짝수 시간을 구분할 경우에는 특정 지점 A에서 무조건 info[0][A], info[1][A] 둘중에 하나만 값을 가져야 한다고 생각하는데 제가 틀렸나요?(왜냐면 BFS를 통해서 최단경로를 찾으니까 info[0][A] info[1][A]에 두개에 값이 기록될수가 없음) // Example program #include <iostream> #include <string> #include <vector> #include <algorithm> #include <queue> #include <stack> #include <unordered_map> #include <map> #include <limits.h> using namespace std; int n,k; int info[500002]; // 수빈이 위치,시간 정보 queue<int> q; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin>>n>>k; fill(&info[0], &info[500001], -1); if(n==k){ cout<<0<<'\n'; return 0; } //------------------------------------------------------------ // BFS로 수빈이 위치 전부 구하기 else { q.push(n); info[n]=0; while(q.size()){ int prev=q.front(); q.pop(); for(int next :{prev-1,prev+1, prev*2}){ if(next<0 || next>500000) continue; if(info[next]!=-1) continue; info[next]=info[prev]+1; q.push(next); } } //-------------------------------------------------------------- // 동생위치를 구하면서 -> 동생,수빈이 위치가 같아지는 지점을 찾음 -> // 그리고 수빈이가 소모한 시간이 동생보다 적거나 같으면 -> 시간차이가 짝수인지 확인 int pos=k; // 동생 초기 위치 int t=0; // 초기 시간 while(pos<=500000){ if(info[pos]<=t){ // 특정 동일위치에서 수빈이가 소모한 시간이 더 적을때 if((info[pos])%2 ==0 && t%2==0){ //둘의 시간이 짝수이면(=시간 차이가 짝수면) cout<<t<<'\n'; break; } else if((info[pos])%2 && t%2){ //둘의 시간이 홀수이면(=시간차이가 짝수면) cout<<t<<'\n'; break; } } t++; pos+=t; } if(pos>500000) cout<<-1<<'\n'; } }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-H 비밀번호 발음하기 질문드립니다
안녕하세요!궁금한 점이 있어서 질문 드립니다.2-H 문제 해설에서 s[i]를 int형으로 반환해서 풀이하시던데 혹시 특별한 이유가 있을까요??저는 s[i]를 그냥 char형으로 풀었습니다.http://boj.kr/9de33b348bcb40ee958c4cfbc845c305
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 질문있습니다
https://www.acmicpc.net/source/65401116강의를 보기 전에 작성한 코드입니다. 문제에서 주어진 예제는 다 맞게 나오는데 어느 부분이 잘못되었는지 모르겠습니다ㅜㅜ
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
59번 종료조건
59번에 종료 조건이 없는데도 어떻게 값이 정상적으로 나오는건지가 궁금합니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
안녕하십니까 큰돌 선생님!!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/8d7c38a0a361454191ef6df051497ac7이 코드는 왜 안되는지 잘 모르겠습니다 ㅠㅠㅠ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
재귀함수로 구현한 조합 함수 관련 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. void combi(int a, vector <int> b) { if (b.size() == k) { print(b); return; } for (int i = a + 1; i < n; i++) { b.push_back(i); combi(i, b); b.pop_back(); } return; } 위의 함수에서 for문 다음의 return 함수를 없애도 함수의 동작에는 문제가 없고 더 빨리 동작하는데 return을 쓸 때의 이점이 있나요? 다른 코드들을 볼 때도 return;이 없어도 동일하게 동작하지만 return;이 있는 많은 예문들을 보게 되는데 return;을 코드에 추가하는 그 이유를 알고 싶습니다. 또한 return;을 넣는 순간 동작 시간이 약 0.08초에서 0.22초로 증가하게 되는데 그 이유를 알고 싶습니다.
-
해결됨코딩테스트 [ ALL IN ONE ]
DFS BFS
그래프 요소의 문제에 접근할 때해당 문제를 DFS, BFS 방법 중어떤 방법을 사용하여 문제를 해결해야할지 항상 헷갈립니다.관련해서 문제 접근 방법론에 대해 따로 강의나 정리해주시면 감사하겠습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-S java 로 정답 맞히신분 계실까요..?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 로직 자체는 강사님이 알려주신 흐름과 동일합니다..언어만 java로 구현한 것일 뿐인데 시간초과를 계속 밷어내요...혹시 자바로 풀어보신 분이 있으시다면.. 어떤 부분이 문제일것 같은지 힌트라도 슬쩍 부탁드립니다..ㅠimport java.io.BufferedReader; import java.io.InputStreamReader; import java.util.*; public class Main { public static ArrayList<Integer>[] graph; public static boolean[] visited; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); String[] input = br.readLine().split(" "); int N = Integer.parseInt(input[0]); int M = Integer.parseInt(input[1]); int[] resArr = new int[N + 1]; visited = new boolean[N + 1]; graph = new ArrayList[N + 1]; int mx = -99; for(int i = 1; i <= N ; i++) graph[i] = new ArrayList<>(); for(int i = 0; i < M; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); int from = Integer.parseInt(st.nextToken()); int to = Integer.parseInt(st.nextToken()); graph[to].add(from); } for(int i = 1; i <= N; i++) { Arrays.fill(visited, false); resArr[i] = go(i); mx = Math.max(mx, resArr[i]); } for(int i = 1; i < resArr.length; i ++) if(resArr[i] == mx) sb.append(i).append(" "); System.out.println(sb); } public static int go(int idx) { visited[idx] = true; int cnt = 1; for(int next : graph[idx]) { if(!visited[next]) { cnt += go(next); } } return cnt; } }
-
해결됨IT 기업 취업을 위한: 코딩테스트 혼자서 정복하기 (C/C++)
f20 에서 f15 + 1은 이해가 됩니다...
다만, f15 에서 f10 +1 +1 / f12 +1 +1 은 이해가 되지 않습니다. 15원을 만들기 위해서는 10원을 만든 동전 개수에서 5원짜리 동전+1 만 하는게 맞지 않나요? 마찬가지로 f12도 12원을 만들기 위해서는 12원을 만든 동전개수에 3원짜리 +1만 하면 되는줄 알았지만 왜 f10 +1+1 / f12+1+1 인지 이해가 되지않습니다...
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
왜 틀렸는지 도저히 모르겠습니다
http://boj.kr/cf2c8a947f5041b69efd55961657526cmax함수 빼고 로직은 다 똑같은 거 같은데 왜 제 코드는 틀린건지 이해가 안됩니다.. 부탁드려요
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
final 선언 이유
Main 클래스 안에서MAX 변수에 대해 굳이 final로 초기화 하는 이유가 무엇일까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-T 질문드립니다.
http://boj.kr/153cb07e167d4de1a892d2dfa6fe08c1생각한 반례나 게시판에 반례 다 입력해보고 display 함수로 다 찍어봐도 문제가 없어보이는데25%에서 자꾸 터지고 있습니다.영상보고 이해는 큰돌님 풀이를 이해 했으나, 제가 초기에 작성한 코드에서 어디가 이상이 있는 지 궁금해서 질문드립니다.구조체에 name 변수는 display로 찍어보고 싶어서 선언했습니다.
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
스토쿠 검사
이렇게 풀어도 정답 다 통과되던데 반례가 있을까요 ?import sys import string as t sys.stdin = open("input.txt", "r") a = [list(map(int, input().split())) for _ in range(9)] True_flag = True nums = [i for i in range(1, 10)] for y in range(0, 9, 3): for x in range(0, 9, 3): res = [] res.extend(a[y : y + 3][0][x : x + 3]) res.extend(a[y : y + 3][1][x : x + 3]) res.extend(a[y : y + 3][2][x : x + 3]) if len(nums) != len(set(res)): True_flag = False break if True_flag: print("YES") else: print("NO")
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-L 질문입니다.
http://boj.kr/8eb2af8984ed4372953a94ed5a6b5d48 처음부터 복잡하게 스크립트를 작성하는건 피하고싶기도 하고, 클래스 구조 설계도 연습해볼겸 Time이라는 클래스를 써서 구현했습니다.팀ID와 득점시간을 받아서 히스토리에 추가합니다.현재 동점일 때 승리 중이었던 팀의 누적 시간에 현재 득점시간 - 승리시작시간을 더합니다.현재 우위일 때 승리시작시간이 초기화 되어있을 경우 자신의 ID와 현재 시간을 기록합니다.while이 모두 끝나고(경기가 끝나고) 승리 중이었던 팀의 누적 시간에 48:00 - 승리시작시간을 더합니다. 여전히 private TC에서 막히네요..
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
반복 for문 Combination으로 하였는데 안됩니다.
저는 반복문 Combination으로 풀었는데 10% 진행 중 틀렸다고 나옵니다.염치 불문하고 질문 드립니다... http://boj.kr/25a5910a7d7a426f89ab47edf1c96199
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-F count 함수 질문
count 함수 내부가 이해가 안되서 질문 올립니다. if (word && (word & mask) == word)설명 해 주신 내용으로는 배운 것을 10진수 숫자로 표현 (mask) 한 값과 word 의 and 비트연산으로 나온 값이 자신이면 배운걸로 이해할 수 있는 단어가 되는 것을 알겠는데요 그럼 그냥 단순히(word & mask)==word 만 하면 되는 것 아닌가요? 그 앞에 word && 은 왜 있는걸까요?