묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
사다리타기질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.import sys def DFS(L,x,y): global cnt if a[x][y]==2: print(cnt) sys.exit(0) else: if L==0: for i in range(10): cnt=i ch[x][y]=1 DFS(L+1,x,y+i) ch[x][y]=0 else: path_count=0 next_path=-1 for j in range(3): xx=x+dx[j] yy=y+dy[j] if 0<=xx<10 and 0<=yy<10 and a[xx][yy]==1 and ch[xx][yy]==0 : next_path=j path_count+=1 #갈 수 있는 방향이 아래로 하나만 있는 경우 if path_count==1: ch[xx][yy]=1 DFS(L+1,x+dx[next_path],y+dy[next_path]) ch[xx][yy]=0 #여러 방향으로 이동이 가능 elif path_count>1: for k in range(3): xx=x+dx[k] yy=y+dy[k] if 0<=xx<10 and 0<=yy<10 and a[xx][yy]==1 and ch[xx][yy]==0 : ch[xx][yy]=1 DFS(L+1,xx,yy) ch[xx][yy]=0 if __name__=="__main__": a=[list(map(int,input().split())) for _ in range(10)] dy=[1,-1,0]#우 좌 히 dx=[0,0,1] cnt=0 ch=[[0]*10 for _ in range(10)] DFS(0,0,0) 저는 up-bottom형식으로 탐색을 했는데 출력값이 아예나오지 않습니다. 어느 부분이 잘못되었는지 알 수 있을까요? ㅠㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-C 질문있습니다.
http://boj.kr/5e6cf7cdc6fc4d2c8d4cbfe08d65038c y,x기준이 아닌 x,y기준으로 풀어보았습니다.오버플로우 조건식도 &&으로 바꾸어보았습니다. 테스트 케이스는 모두 통과했는데 또 오답입니다. 무엇을 잘못하고 있는 걸까요 ㅠ
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
1강 4번 예시 답안에 대한 질문
문제 4. 숫자야구 ( # 2503 )A 는 3 자리 숫자로 된 정답을 하나 정합니다.B 는 3 자리 숫자를 제시해서 A 가 생각하고 있는 정답을 맞히려고 합니다.B 가 말한 숫자가 정답에 포함되어 있다면 1 Ball 입니다.B 가 말한 숫자가 정답에 포함되어 있고, 자리도 동일하다면 1 Strike 입니다.다른 숫자로 이루어진 세 자리수Strike 와 Ball 의 결과를 보고, 가능한 숫자를 계산하는 프로그램을 작성하세요.4123 1 1 356 1 0 327 2 0 489 0 1 2백준 사이트 들어가보니 가능한 숫자 324,328 이렇게 두 개이어서 결괏값이 2라고 나와있는데,329를 생각하고 있어도 위와 같은 s,b 가 가능한 것이 아닌가요?
-
해결됨코딩테스트 [ ALL IN ONE ]
프로그래머스에서는 어떤 문제를 풀어야 하나요
레벨1은 그냥 풀겠는데 레벨2부터는 난이도 책정이 백준에 비해 넓은 것 같더라 구요 그래서 정답률 몇 짜리 정도 되는 걸 풀어야 하는지 알 수 있을까요
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
DFS, BFS 소스 코드 질문있습니다
http://boj.kr/eb95bf013f5d4203bfdb1e9e027fc489백준에 DFS,BFS문제가 있어 강의 소스코드 복습차 풀어봤는데, 테스트케이스는 통과하지만 제출했을 때 오답입니다.소스코드를 응용하지 못하고 놓친 포인트가 있을까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-R. 질문있습니다
http://boj.kr/eaf52073800f4b9397140cea145862d6제 코드에서 놓친게 무엇일까요..!현재 노드에서 이어진 것이 없고, 잘리지 않았다면 리프노드로 판단해서 수를 카운트 해주었는데 오답입니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-O 질문있습니다!
http://boj.kr/132cce1f1dab4af7be9ad1e722220221이 코드가 틀린 이유가 뭘까요..ㅠ 도저히 모르겠네요.그리고, 정답 풀이에서 check bool 변수가 하는 역할이 무엇일까요? 제 코드와의 차이가 check 플래그 변수가 없다는 것이 가장 큰 차이인 거 같은데 왜인지 모르겠습니다..
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
안녕하세요 5-R 주사위 윷놀이 질문이 있습니다.
#include<bits/stdc++.h>using namespace std; const int INF = 987654321;int a[14], mal[4], n = 10;int v[104]; 에서 원소 값을 넣어주는 int v[104]; 의 배열 크기가 70, 80으로 해보면 값이 달라지는 것을 확인을 했습니다. 실제로 31까지 밖에 인덱스를 사용하지 않음에도 불구하고 100 이상으로 배열의 크기를 올려줘야 하는 이유는 무엇일까요? 통상적으로 +3정도 배열의 크기를 잡아주었습니다! 이번 예시로 앞으로 배열의 크기를 잡을 때 3배 정도의 크기로 잡아주어야 하나 고민을 하게 되었습니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
9-4.최대 수입 수케쥴 문제 질문있습니다!!
9-4.최대 수입 수케쥴 문제 질문있습니다!!import java.util.ArrayList; import java.util.Collections; import java.util.PriorityQueue; import java.util.Scanner; class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); ArrayList<Point> arrayList = new ArrayList<>(); for (int i = 0; i < N; i++) { int x = sc.nextInt(); int y = sc.nextInt(); arrayList.add(new Point(x, y)); } Collections.sort(arrayList); PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Collections.reverseOrder()); int tmp = arrayList.get(0).y; int answer = 0; for (int i = 0; i < arrayList.size(); i++) { if (arrayList.get(i).y < tmp) { answer += priorityQueue.poll(); tmp = arrayList.get(i).y; } priorityQueue.add(arrayList.get(i).x); if (i == arrayList.size() - 1) { answer += priorityQueue.poll(); } } System.out.println(answer); int j=0; } } class Point implements Comparable<Point> { int x; int y; Point(int x, int y) { this.x = x; this.y = y; } @Override public int compareTo(Point o) { return o.y-this.y; } } 답이 잘 나오는데 왜 오답인지 궁금합니다 ㅠㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 p85 stable_sort()
안녕하세요! 교안 p85의 stable_sort() 예제 코드에서#include <bits/stdc++.h> using namespace std; int main() { // pair의 첫 번째 요소는 정렬한 값, 두 번째 요소는 원래 인덱스를 나타냄 vector<pair<int, int>> pairs = {{5, 1}, {2, 2}, {5, 3}, {3, 4}, {2, 5}}; cout << "Original: "; for (const auto &p : pairs) { cout << "(" << p.first << ", " << p.second << ") "; } cout << "\n"; sort(pairs.begin(), pairs.end()); cout << "Sorted with sort: "; for (const auto &p : pairs) { cout << "(" << p.first << ", " << p.second << ") "; } cout << "\n"; // 원본 데이터로 초기화 pairs = {{5, 1}, {2, 2}, {5, 3}, {3, 4}, {2, 5}}; // stable_sort 사용 stable_sort(pairs.begin(), pairs.end()); cout << "Sorted with stable_sort: "; for (const auto &p : pairs) { cout << "(" << p.first << ", " << p.second << ") "; } cout << "\n"; return 0; }for (const auto &p : pairs) { cout << "(" << p.first << ", " << p.second << ") "; }여기에서 pairs에 들어있는 타입(pair<int, int>)이 왜 const auto &인지 궁금합니다!또 교안 p83의 예제 코드에서#include <bits/stdc++.h> using namespace std; vector<pair<int, int>> v; int main() { for (int i = 10; i >= 1; i--) { v.push_back({i, 10 - i}); } sort(v.begin(), v.end()); for (auto it : v) cout << it.first << " : " << it.second << "\n"; return 0; }위의 for 문에서 pair<int, int>를 받을 때는 auto 로 받는데,두 예제가 같은 pair<int, int> 타입을 받을 때 for (const auto &p : pairs) 와 for (auto it : v) 로 다른 이유가 무엇인지 알고싶습니다!
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션2 공통원소 구하기 정렬 없이 해봤는데 괜찮을까요??
<html> <body> <script> function solution(arr1, arr2) { const answer = []; const n = arr1.length; const m = arr2.length; let p1 = (p2 = 0); while (p1 < n) { if (arr1[p1] === arr2[p2]) { answer.push(arr1[p1++]); p2++; } else { p1++; } } p1--; while (p2 < m && p1 >= 0) { if (arr2[p2] === arr1[p1]) { answer.push(arr2[p2++]); p1--; } else { p1--; } } return answer.sort((a, b) => a - b); } const arr1 = [1, 3, 9, 5, 2]; const arr2 = [3, 2, 5, 7, 8]; console.log(solution(arr1, arr2)); </script> </body> </html>위와 같이 p1먼저 돌고 그 다음에 p2돌면서 p1을 뒤에서부터 찾았는데 이렇게 하는건 별로 일까요...?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-V 질문 있습니다
안녕하세요, 큰돌님 7-v 질문 드립니다.첫번째 풀이가 큰돌님의 답 코드와 비슷한 로직을 사용한다고 생각하는데,왜 시간 초과가 나는지 모르겠습니다.https://www.acmicpc.net/source/73255801백트래킹 풀이 (시간초과)https://www.acmicpc.net/source/73256688dp 배열 + 반복문 (맞았습니다!)
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
이터레이터 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.현재 교안으로 1회독중에 이터레이터 부분에서 막혀 질문드립니다. cout << &*lower_bound(a.begin(), a.end(), 3) << endl; cout << &*a.begin(); cout << &*lower_bound(a.begin(), a.end(), 3) - &*a.begin() << endl;각각의 주소값이0x139e05e580x139e05e50 임을 가정했을때0x139e05e58 - 0x139e05e50 연산이 왜 8이 아니라 2가 되는지 모르겠습니다.
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
[3강 누적합>이모스1법> 백준 17611] 런타임에러 질문드립니다!
import sys sys.stdin = open('BackJoon/3강_누적합/5_17611.txt','r') input = sys.stdin.readline n = int(input()) vertex = [list(map(int, input().split())) for _ in range(n)] ######## (x_min, y_min) -> (0, 0)으로 이동 x_min, x_max = 500000, -500000 y_min, y_max = 500000, -500000 for x,y in vertex: x_min = min(x, x_min) x_max = max(x, x_max) y_min = min(y, y_min) y_max = max(y, y_max) x_diff = 0 - x_min y_diff = 0 - y_min for i in range(n): vertex[i][0] = vertex[i][0] + x_diff vertex[i][1] = vertex[i][1] + y_diff ##### 수평선 조사 (강의에서와 같이 왼쪽으로 돌려서 봄) vertex_x_incre = sorted(vertex, key = lambda x: (x[0], x[1])) # y_range = y_max-y_min+1 x_range = x_max-x_min+1 x_sum_list = [0] * (y_range+1) # x축 방향으로 [1, 0, 0, ..., -1] 더함 for i in range(0,n,2): # 선분은 2개의 꼭지점으로 이루어짐 v1 = vertex_x_incre[i] v2 = vertex_x_incre[i+1] if v1[0] != v2[0]: # 디버깅 print('x point does not match!!')#만약 선분이 직선이 아니라면(혹은 sort가 잘못됨) break if v1[1] >= v2[1]: print('y point does not align!!')#sort가 잘못됨 print('v1:', v1) print('v2:', v2) break x_sum_list[v1[1]] += 1 x_sum_list[v2[1]] -= 1 x_sum_list = x_sum_list[:-1] #범위밖의 맨 마지막 -1 자리 버림 prefix = [0]*(y_range+1) for i in range(y_range): prefix[i+1] = prefix[i] + x_sum_list[i] prefix = prefix[1:] h = max(prefix) ##### y축 방향으로 조사 (수직선 조사) vertex_y_incre = sorted(vertex, key = lambda x: (-x[1], x[0])) y_sum_list = [0] * (x_range+1) # y축 방향으로 [1, 0, 0, ..., -1] 더함 for i in range(0,n,2): v1 = vertex_y_incre[i] v2 = vertex_y_incre[i+1] if v1[1] != v2[1]: print('y point does not match!!') break if v1[0] >= v2[0]: print('x point does not align!!') print('v1:', v1) print('v2:', v2) break y_sum_list[v1[0]] += 1 y_sum_list[v2[0]] -= 1 y_sum_list = y_sum_list[:-1] prefix = [0]*(x_range+1) for i in range(x_range): prefix[i+1] = prefix[i] + y_sum_list[i] prefix = prefix[1:] v= max(prefix) print(max(h,v))
-
미해결비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
let current = this.head 질문 있습니다!
this.head 대신 let current = this.head 처럼 current변수에 할당하여 사용하는 이유가 무엇일까요?ㅠ변수에 할당하여 사용하지 않았을 때 값을 보니 값이 다르게 나와 문의드립니다. li.add(3)이 실행될때 첫번째 노드가 사라짐 정상출력
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 문제 시간초과
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요.강의 잘 듣고 있습니다.!! 혼자 풀어보는 중인데, 시간초과가 나서 오랫동안 고민하다 질문드립니다. 제 생각에는 Fire를 전파하는 부분에서 비효율이 있는듯한데,이를 개선할 방법이 딱히 떠오르지 않아서요, 질문드립니다. ㅠ #include <bits/stdc++.h> using namespace std; int R, C; vector<vector<char>> maze; pair<int, int> jihun; vector<pair<int, int>> fire; vector<vector<int>> delta = {{0,-1},{1,0},{0,1},{-1,0}}; vector<vector<int>> visited; set<int> ret; void dfs(pair<int, int>J, int step){ step+=1; // cout << "DEBUG: " << step << ", (" << J.first <<"," << J.second << ")" << endl; // for(int i = 0 ; i < R ; ++i){ // for(int j = 0 ; j < C ; ++j){ // if (i ==J.first && j == J.second) cout << "J"; // else cout << maze[i][j]; // } // cout << endl; // } // cout << endl; if (J.first == 0 || J.second == 0 || J.first == R-1 || J.second == C-1){ ret.insert(step); return; } // 1. 맵 업데이트 int cnt = 0; int s = fire.size(); for(int q = 0 ; q < s ; ++q ){ for(int p = 0 ; p < 4 ; ++p){ int nextF_i = fire[q].first + delta[p][0]; int nextF_j = fire[q].second+ delta[p][1]; if (nextF_i >=0 && nextF_j >=0 && nextF_i < R && nextF_j < C){ if (maze[nextF_i][nextF_j] == '.' || maze[nextF_i][nextF_j] == 'J'){ maze[nextF_i][nextF_j] = 'F'; fire.push_back({nextF_i, nextF_j}); cnt ++; } } } } // 2. dfs 호출 propagation for(auto d : delta){ int next_i = J.first + d[0]; int next_j = J.second+ d[1]; if (next_i >= 0 && next_j >= 0 && next_i < R && next_j < C){ if (visited[next_i][next_j] == 0 && maze[next_i][next_j] == '.'){ visited[next_i][next_j] = 1; // 방문 처리 dfs({next_i, next_j}, step); visited[next_i][next_j] = 0; // 방문 원복 } } } // 3. 맵 원복 while(cnt>0){ pair<int, int> b = fire.back(); fire.pop_back(); maze[b.first][b.second] = '.'; cnt--; } } int main(){ cin >> R >> C; maze = vector<vector<char>>(R, vector<char>(C)); visited = vector<vector<int>>(R, vector<int>(C, 0)); string s; for(int i = 0 ; i <R ; ++i){ cin >> s; for(int j = 0 ; j < C ; ++j){ maze[i][j] = s[j]; if (maze[i][j] == 'J') jihun = {i,j}; else if (maze[i][j] == 'F') fire.push_back({i,j}); } } visited[jihun.first][jihun.second] = 1; dfs(jihun, 0); if (!ret.empty()){ cout << *ret.begin(); } else cout <<"IMPOSSIBLE"; return 0; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-H 질문있습니다
모음이나 자음이 3개가 연속으로 올 때 비밀번호로 적절하지 않다는 조건을 for문 밖으로 빼면 틀리는 이유가 알고 싶습니다!이렇게 짰을 땐 틀렸다고 나오는데 조건을 어느 부분에서 만족하지 않는지 궁금합니다#include<bits/stdc++.h> using namespace std; string str; bool mo(char c){ if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'){ return 1; } return 0; } int main(){ while(true){ cin >> str; if(str == "end"){ break; } bool moum = 0; bool same = 0; int cnt1 = 0; int cnt2 = 0; for(int i = 0; i < str.length(); i++){ if(mo(str[i])){ moum = 1; cnt1++; cnt2 = 0; }else{ cnt2++; cnt1 = 0; } if(i >= 1 && (str[i-1] == str[i]) && str[i] != 'e' && str[i] != 'o'){ same = 1; } } if(cnt1 >= 3 || cnt2 >= 3 || moum == 0 || same == 1){ cout << "<" << str << "> is not acceptable.\n"; }else{ cout << "<" << str << "> is acceptable.\n"; } } return 0; }
-
미해결Do it! 알고리즘 코딩테스트 with C++
백준11505, 교재 73번
#include <iostream> #include <vector> #include <cmath> using namespace std; static vector<long> tree; static int n, m, k,mod = 1000000007; void tree_set(int a); void change_val(int index, long val); long gugan(int s, int e); int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n >> m >> k; int q = n; int l = 0; while (q != 0) { q = q / 2; l++; } int tree_size = int(pow(2, l+1)); int left_index = pow(2, l); tree.resize(tree_size); fill(tree.begin(), tree.end(), 1); for (int i = left_index; i < n+left_index; i++) { cin >> tree[i]; } tree_set(tree_size-1); for (int i = 0; i < m + k; i++) { long a, s, e; cin >> a >> s >> e; if (a == 1) { change_val(s + left_index - 1, e); } else if (a == 2) { long start = s + left_index - 1; long end = e + left_index - 1; long result = gugan(start, end); cout<<result<<'\n'; } } } long gugan(int s, int e) { long part_sum = 1; while (s <= e) { if (s % 2 == 1) { part_sum *= tree[s]%mod; } if (e % 2 == 0) { part_sum *= tree[e]%mod; } s = (s + 1) / 2; e = (e - 1) / 2; } return part_sum; } void change_val(int index, long val) { tree[index] = val; while (index > 1) { index = index / 2; tree[index] = tree[index*2]%mod*tree[index*2+1]%mod; } } void tree_set(int a) { while (a != 1) { tree[a / 2] *= tree[a]%mod; a--; } } 위의 방법으로 코드를짜서 제출했더니 출력초과가 발생합니다. 왜 이런오류가 발생하는지 모르겠습니다..
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 81p 예제코드 질문드립니다.
안녕하세요 큰돌님교안 81p 예제 코드를 그대로 복사하였는데 에러가 떠서요. 짧은 코드라서 캡쳐본으로 올리겠습니다.위에서 전역변수로 초기화하는 것까지 똑같이 했는데 왜 이런 오류가 뜨는 것인지 궁금합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 79p vector 초기화 질문드립니다.
안녕하세요 큰돌님강의를 듣고 천천히 따라가고 있는데요, 강의 설명도 너무 이해되게 잘해주시고 교안도 잘 보고 있습니다.그런데 몇 가지 아쉬운 부분들이 있어서요..ㅠㅠc++을 처음 접하는데 가끔 예시코드를 봤을 때 설명 않고 넘어가시는 부분이 있기에 이해가 안될 때가 종종 있습니다.. ㅜㅜ 예를 들어 교안 79p에서vector<int> v{1, 2, 3};이 코드에서 지금 vector가 초기화가 어떻게 된 것인지 주석이라도 간략하게 달아주셨으면 좋겠는데 따로 찾아봐도 이거랑 비슷한 방식의 초기화를 잘 못찾겠어서요.. 제가 코드를 더 작성해서 저렇게 초기화된 건 v = {1, 2, 3}과 같다고 유추하였는데 맞을까요..?아직 교안 전부를 본 것은 아니라 뒤에 설명을 해주실지는 모르지만, 당장의 예제 코드를 이해하기 위해서 추가적으로 구글링하고 하는 부분들이 조금 시간이 소요되는 것 같습니다 그리고 다른 부분에서도, 교안에서 처음 push_back()이 언급됐을 때 문자하나씩밖에 더하지 못한다고 설명해주셨는데, split() 강의에서는 string 단위로 push_back(token) 해서 문자열이 추가되는 거 보고 혼란스럽기도 했습니다..ㅜㅜ 다르게 이해될 소지 없이 분명하게 설명해주셨으면 좋겠습니다..TrivallyCopyable도 그렇고,이런 UB같은 것도 그렇고 이미 알고 있을 거라고 생각하시고 넘어가시는 부분들에, 물론 중요한 설명을 빠뜨리신 것은 절대 아니지만 이런 작은 부분들이 모여서 제가 교안 외에 따로 검색을 하거나 찾는 부분이 잦게되다 보니, 시간도 걸리고 자꾸 흐름이 끊겨서요..시간이 걸리더라도 이러한 부분들에 대해서 간단한 주석이라도 설명해주시면 예제코드를 보았을 때 바로 이해하기가 더 좋을 것 같다는 생각이 들었습니다..! 큰돌님 유튜브도 잘 보고있고 이미 충분히 질 좋은 강의와 빠른 피드백으로 감사함이 참 많은데.. c++을 처음 접하는 사람들도 들을 수 있다고 하셔서, 이 강의 하나로 c++을 빠르게 공부할 목적으로 구매한 것이라 제 욕심이지만 말씀드립니다..ㅠㅠ