묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-G_ 2910 빈도 정렬 변수
안녕하세요 큰돌님! 저는 처음 입력을 받을때 그냥 a라는 int를 통해 입력을 받았고 결과도 잘 나왔습니다.전체 코드 링크:http://boj.kr/9b27f7b5e206448296677cba46683e86int main (){ cin >> n >> m; for(int i=0; i<n; i++){ cin >> a; mp[a]++; if(mp_first[a]==0) mp_first[a]=i+1; }그런데 큰돌님은 여기서 왜 굳이 입력 받으실때 a[1004] 배열로 받으셨는지 궁금합니다!int n, c, a[1004];int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n >> c; for(int i = 0; i < n; i++){ cin >> a[i];mp[a[i]]++; if(mp_first[a[i]] == 0) mp_first[a[i]] = i + 1; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8 펜윅트리
펜윅트리 설명이 너무 부족한 것 같습니다.인덱스랑 인덱스에 담긴값이랑 어떤 관계로 어떻게 찾아간다 이런부분이 있어야되는데 그냥 숫자만 얘기하시면서 숫자가 어떤걸 해당한다 이런내용도 없고 강의자료도 이미 아는사람이 이해할법하게 금방금방 넘어가구요. 이전강의랑 너무 다르게 진행하네요;
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-T 질문있습니다.
0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 2 3 3 0 0 0 0 0 0 4 4 3 1 0 0 0 0 0 0 4 4 4 4 0 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 0 0 4 4 0 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0예제 2번을 입력했을때 저는 위와 같은 결과가 나오도록 코드를 짰고 통과했습니다.다만 처음에 제가 문제를 대충 보고, "4개의 변이 모두 갖춰진 1x1 정사각형" 의 개수를 세는 것인줄 알고 위의 결과를 어떻게 수정해야하나 고민했었는데요. 좋은 방법이 딱히 떠오르지 않아서 질문드립니다.요약 : 기존 문제는 4개의 변이 아닌 4개의 꼭지점만 드래곤 커브에 관계가 있는 경우를 셌지만 이게 아니라 4개의 변을 갖춘 정사각형을 센다면 어떻게 해야할까 입니다.가장 아래 있는 위가 뚫린 사각형을 보면, 행열 인덱스를 구분선이 아니라 셀에 두더라도.. 구분이 안 될 것 같습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-K 시간초과 관련 질문있습니다!
안녕하세요 선생님!2가지 질문드릴게 있습니다!제가 만든 로직이 왜 시간초과인지 잘 모르겠고시간초과를 어떤식으로 해결해야할지 잘 모르겠습니다...http://boj.kr/e32a513c49c94b99b253e5daedafde8c#include <iostream> #include <queue> using namespace std; const int dy[4] = { -1,1,0,0 }; const int dx[4] = { 0,0,-1,1 }; int R, C, sy, sx, ey, ex, ret; int visited[1501][1501]; char adj[1501][1501]; queue<pair<int, int>> q; queue<pair<int, int>> temp; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> R >> C; sy = -1; for (int y = 0; y < R; y++) for (int x = 0; x < C; x++) { cin >> adj[y][x]; if (adj[y][x] == 'L') { if (sy == -1) { sy = y; sx = x; } else { ey = y; ex = x; } } } q.push({ sy,sx }); visited[sy][sx] = 1; while (true) { // 백조끼리 만나나 못만나나 확인 while (q.size()) { int y = q.front().first; int x = q.front().second; q.pop(); for (int i = 0; i < 4; i++) { int ny = y + dy[i]; int nx = x + dx[i]; if (ny < 0 || ny >= R || nx < 0 || nx >= C) continue; if (ny == ey && nx == ex) { cout << ret; return 0; } if (visited[ny][nx]) continue; if (adj[ny][nx] == 'X') continue; visited[ny][nx] = visited[y][x]; q.push({ ny,nx }); } } // 빙판 녹이기 for (int y = 0; y < R; y++) for (int x = 0; x < C; x++) if (adj[y][x] == 'X') { for (int i = 0; i < 4; i++) { int ny = y + dy[i]; int nx = x + dx[i]; if (ny < 0 || ny >= R || nx < 0 || nx >= C) continue; if (adj[ny][nx] == '.' || adj[ny][nx] == 'L') { if (visited[ny][nx] != 0) { q.push({ y,x }); visited[y][x] = visited[ny][nx]; } temp.push({ y,x }); break; } } } while (temp.size()) { adj[temp.front().first][temp.front().second] = '.'; temp.pop(); } ret++; } return 0; }
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
안녕하세요 11724번 질문드려요!
안녕하세요! 강의 수강 중 질문이 있어 질문 드립니다.현재 이런식으로 코드를 작성했고, 백준 스타일에 맞춰 제출을 했는데 오답처리가 되었습니다. 디버깅 시에도 1번예제6 5 1 2 2 5 5 1 3 4 4 6이걸 입력했을 때 2가 나오는 것이 아닌 dfs를 호출시 if절에서 전부 vistied[i] 부분이 false처리가 되어서 입력한 크기인 6이 answer로 계속 출력되고 있습니다.어느 부분이 문제여서 계속 찾고 있지만 발견하지 못하여 질문드립니다.package algorithmstudy.dfs; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokenizer; public class boj11724 { final static int MAX = 1000 + 10; static boolean[][] graph; static boolean[] visited; static int N, M; static int answer; static void dfs(int idx) { visited[idx] = true; for (int i = 1; i <= N; i++) { if (!visited[idx] && graph[idx][i]) { dfs(i); } } } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); // 1. graph에 연결 정보 채우기 graph = new boolean[MAX][MAX]; visited = new boolean[MAX]; for (int i = 0; i < M; i++) { st = new StringTokenizer(br.readLine()); int u = Integer.parseInt(st.nextToken()); int v = Integer.parseInt(st.nextToken()); graph[u][v] = true; graph[v][u] = true; } for (int i = 1; i <= N; i++) { if (!visited[i]) { answer++; dfs(i); } } bw.write(String.valueOf(answer)); br.close(); bw.close(); } }
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
(해결)정수론 #1978 자바코드로는 통과, 파이선으로는 통과가 안돼요...
+) 자바코드로는 통과했습니다. 파이썬코드로는 왜 통과를 못하는 걸까요?ㅠㅠimport java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int N = s.nextInt(); int [] num = new int[N]; int cnt = 0; for(int i = 0; i<N; i++){ num[i] = s.nextInt(); if(num[i] == 1) continue; int j; for( j= 1; j<(int)Math.sqrt(num[i])+1; j++){ if((num[i] % j == 0) & (j != 1)) break; } if(j == (int)Math.sqrt(num[i])+1) cnt += 1; } System.out.println(cnt); } } 파이선은 백준에 제출했는데 틀렸다고 나옵니다... 제 알고리즘에 문제를 찾아주실 수 있나요?ㅠㅠimport math #약수 빠르게 구하기(n의 제곱근까지만 구하기) #1978 N = int(input()) num = list(map(int, input().split())) cnt = 0 for i in range(len(num)): if num[i] == 1: continue for j in range(1, int(math.sqrt(num[i])+1)): if ((num[i] % j == 0) & (j != 1)): break if (j*j != num[i]) & (j == int(math.sqrt(num[i]))): cnt += 1 print(cnt)
-
해결됨코딩테스트 [ ALL IN ONE ]
백트래킹
안녕하세요!백트래킹 강의들은 언제 업로드가 완료되나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-U 다른풀이 질문
안녕하세요 큰돌 선생님 강의 감사합니다..해당 문제를 처음에 보고 dp로 풀 수 있을것 같아서 접근했는데 원하는 답이 나오지 않아 선생님 강의를 보고 다익스트라로 해결하였습니다.근데 혹시 이 문제 dp로는 해결할 수 없을까요?http://boj.kr/b2b9e324cd1644e7a5edb8caf23830aa처음 dp로 해결하려던 코드입니다. 사실 예제 2번 부터 답이 틀려서 완전 틀린 코드이지만 어디가 틀렸는지 잘 모르겠습니다.dp의 매개변수로는 y좌표, x좌표, 그리고 d라는 이전에 왔던 방향을 뜻하는 매개변수를 넣었습니다. 현재의 값이 상하좌우 어디에서 온건지에 따라 최적의 값이 달라지기에 d를 추가하였습니다.dp배열의 초기값은 -1로 초기화했고, 또한 방문여부를 해결하기 위해서 visited배열을 만들어 해결하였습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 이왜틀..
http://boj.kr/7a58b316a27d4759a0374f44dba24267 질문을 너무 많이해서 죄송합니다... 강의를 보기전에 작성한 것인데.. 이게 왜 틀렸는지 모르겠습니다. 선생님 알고리즘과 유사한 것 같고 반례도 잡은 것 같은데.. 다음부터는 딴 짓 안하고 substr 쓰겠습니다..
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-F 질문있습니다.
http://boj.kr/1b398d90c42f47da868c6e70fe49c92a 안녕하세요.선생님이해가 되지 않는 부분이 있어 문의드립니다.제가 올린 코드로 "Baekjoon Online Judge" 입력을 넣으면 "Onrxwbba Bayvar W*(오류문자)qtr"이 반환됩니다. 그런데 제가 로직 대로 테스트를 해보니 u는 h로 변환이 되는 것이 맞는 것 같습니다. (28번쨰 줄 test 다음) 왜 안되는 것인지 알 수 있을까요? string은 char과 다른 무언가가 있나요..? (int로 해결해서 푸니 되는 걸 보니 overflow 관련 된거 같긴 한데 이해가 가지 않아 질문드립니다.)
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
1090완전탐색
해당 문제에 대해 몇번을 다시 읽고 있는데 왜 출력값이 예제와 같이 나오는지 이해가 안됩니다. '첫째 줄에 수 N개를 출력한다. k번째 수는 적어도 k개의 체커가 같은 칸에 모이도록 체커를 이동해야 하는 최소 횟수이다.'여기서 k는 무엇을 얘기하는 건가요?저는 4명의 친구들이 만날때 4명의 이동거리가 가장 짧은 좌표에서의 각 친구들의 이동거리를 순차적으로 나타내는 거 라고 생각하고 문제를 풀려고 했는데 그럼 주어진 출력예시와 맞지가 않습니다...
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
if mid>=maxx and Count(mid)<=m:
강의 영상에선 if Count(mid)<=m: 조건만 사용하셨는데 내려 받은 파일을 보면 mid>=maxx라는 조건도 붙이셨더라구요mid>=maxx 조건은 어떤 걸 위한 건가요??신경 안 써도 괜찮을까요?
-
해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
제가 질문을 잘 이해를 못하는지
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 1부터 100까지의 자연수 중에 3장을 뽑아서 그 경우의 수 중에서 k번째로 큰 합산을 구하는 거라고 이해를 했습니다. 그래서 먼저 중복을 제거해서 내림차순으로 정렬후에,k번째로 큰 합산이니까 0, 1 번째 합산을 빼놓고 2번째 인덱스를 시작기준으로 k번째의 원소의 합을 더하면 되는게 아닌지 질문드립니다. import sys sys.stdin=open('input.txt', 'rt') n, k = map(int, input().split()) arr = list(map(int, input().split())) distinct_arr = list(set(arr)) distinct_arr.sort(reverse=True) print(k) print(distinct_arr) result = int(distinct_arr[0])+int(distinct_arr[1])+int(distinct_arr[k+1]) print(result)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
참조에 의한 호출 질문합니다.
선생님의 코드를 기반으로, struct를 사용하지 않고 구현하려고 합니다.move 함수의 인자로 배열을 참조로 전달하고자 했습니다.void _move(int arr[24][24]) { int temp[24][24]; for(int i = 0; i < n; i++){ int c = -1, d = 0; for(int j = 0; j < n; j++){ if(arr[i][j] == 0) continue; if(d && arr[i][j] == temp[i][c]) temp[i][c] *= 2, d = 0; else temp[i][++c] = arr[i][j], d = 1; } for(c++; c < n; c++) temp[i][c] = 0; } memcpy(arr, temp, sizeof(arr)); }이런 식으로 코드를 짜봤는데 memcpy 에서 에러가 발생합니다.참조에 의한 호출로 인해 에러가 발생한 걸까요?이 에러를 어떻게 해결할 수 있을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-D 질문있습니다.
안녕하세요 큰돌님! 수업 내용대로 다시 풀이해서 제출했는데 컴파일 에러가 떠서 질문드립니다ㅠ.ㅠreverse함수의 B앞에 공백을 없애니 컴파일 에러는 사라졌는데, 혹시 오류가 난 이유를 알 수 있을까요...? #include <bits/stdc++.h> using namespace std; string A, B; int result; int main(){ cin >> A ; B = A; //reverse는 원본배열에 영향을 주므로 미리 B에 넣어서 reverse하기 reverse(B.begin(), B.end()); if(A == B) result = 1; else result = 0; cout << result << "\n"; return 0; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6주차_개념 강의 질문
개념 강의에서 2792_보석상자 문제 중 check 함수의 기능을 이해 못했습니다. check함수의 기능이 무엇인지 설명해주실 수 있나요? check 리턴 값이 1이면 왼쪽 부분 탐색, 0이면 오른쪽 부분 탐색을 하게끔 구현하신건가요? 제가 생각한 check 함수의 기능은 다음과 같습니다.//현재 설정된 mid 값을 기준으로 보석을 학생들에게 나눠주었을 때, 몇명에게 나눠줄 수 있는지 num으로 측정 bool check(ll mid){ll num=0; // 그룹 크기 담을 변수for(int i=0; i<m; i++){num+=a[i]/mid; // mid 값으로 나눠진 몫, 보석의 총 그룹 수if(a[i]%mid) num++;// 나머지 있으면 추가 +1}return n>=num; -> 이 리턴 값의 의미를 모르겠습니다. 챗gpt로는 가장 많은 보석을 가진 학생의 보석 수가 n 이하인지를 판단하는 것 이라고 나오네요.. 왜 이런 값을 리턴하는지 궁금합니다.}
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
시간복잡도가 궁금합니다.
해당 코드에서는 말 4개와 주사위 수 10개를 완탐해서 구했는데요, 이는 4^10으로 약 100만의 시간 복잡도를 갖으리라 생각했습니다.#include <bits/stdc++.h> using namespace std; int a=0; void func(vector<int> v, int n) { ++a; if (n == 10) { for (auto i : v) cout << i << ","; cout << endl; return; } for (int i=0; i<4; ++i) { v.push_back(i); func(v, n+1); v.pop_back(); } } int main() { vector<int> v; func(v, 0); cout << a; }이 코드로 a를 확인해보면 func은 약 139만회 정도 호출됐다고 나옵니다.강사님이 완전탐색을 하겠다고 한 이유는 if (n==10)인 시점에서 (로직을 진행할 경우의 수가 완성됨) 호출할 함수가 최대 4^10의 횟수를 가지니까 1억 미만이므로 괜찮다고 생각하신건가요? 여기까진 저도 납득했습니다. 조합을 만드는 함수의 호출도 139만 정도에, 로직을 실행할 함수도 105만정도니까 가능하겠구나~ 라고 생각했습니다. 하지만 만약 말의 개수가 4개가 아니라 5개였다면? 조합을 만드는 함수는 1220만번 호출되고 로직을 실행하는 함수는 5^10회, 약 976만회가 호출됩니다. 합하면 약 2천만인데 이런 경우에도 완탐으로 실행해도 괜찮을까요??말의 개수가 4일때의 실행시간은 약 200ms대를 기록했지만 말이 5개가 되면 실행시간은 약 1800ms까지 꽤나 큰 차이를 보였습니다. 애초에 함수 호출이 139만에서 1220만회로 약 10배 늘었으니 당연하겠지만.. 보시면 func는 단순히 조합을 만드는 함수이고 로직을 실행하는 함수가 없는데도 시간이 꽤나 걸립니다. 글이 두서가 없어서 죄송합니다;; 궁금한 점을 정리하자면 다음과 같습니다.조합을 만드는 함수와 로직을 실행하는 함수 중, 로직을 실행하는 함수의 호출순서로 시간복잡도를 계산하면 될까요? (로직실행 함수가 조합만드는 함수보다 무거우니까)아니면 두 함수의 호출 횟수를 더해서 생각하는게 맞을까요?참고로 저는 처음에 말이 5갠줄알고, 조합을 만드는데도 시간이 많이 걸리길래 완탐이 아닌 중복조합을 다 제거하고 실행시켰습니다.. 하지만 실행시간은 강사님 코드의 실행시간과 동일하게 나왔네요.. (이틀동안 고민했는데 허탈합니다ㅠ)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
모범 답안을 활용한 공부방법 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 현재 1주차 문제를 풀고 있는 학생입니다.선생님 말씀대로 문제를 푼 후 강의를 보고 있습니다.강의의 모범답안의 접근 방법을 이해하고 한번씩 쳐보고 있는데, 모범 답안을 암기하는 것도 효율적인 공부 방법인지 질문드립니다.감사합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-P 문제 질문
안녕하세요 큰돌선생님 매번 좋은 강의 감사합니다해당문제를 강의 시청전에 먼저 풀어보았는데 15%에서 오답처리를 받아서 질문드립니다저는 이동 비용은 + 로 처리하였고, 얻을수 있는 금액은 - 로 처리하였습니다. 거꾸로 처리하였습니다. 또한 선생님처럼 벨만포드 알고리즘을 이용하여 문제를 풀었는데 어느부분이 잘못된것인지 잘 모르겠습니다.마지막 출력은 bfs를 이용하지 않고 사이클이 있는데 이동가능한 경우(돈 무한), 이동 가능한경우(최대의 돈), 이동할 수 없는 경우(gg) 이렇게 3가지로 나누어 출력하였습니다. http://boj.kr/40828aec1df94d10a50538040db954c3
-
해결됨코딩테스트 [ ALL IN ONE ]
전자책 교재
교재 전자책을 어떻게 받을수 있나요?