묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
격자판 최대합 질문
안녕하세요 격자판 최대합 질문입니다.for i in range(n): sum1+=a[i][i] sum2+=a[i][n-i-1] 여기서 sum2가 이해가 가질 않습니다 ㅠ n이 5번 돌때면 n=1이고 i=0인데 그러면 a[0][0]이 되는것이아닌가요? 확인부탁드립니다 ㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1 - A문제 while 질문드립니다.
안녕하세요.1 - A 문제 강사님의 코드에서 while(next_permutation(a, a + 9)) 에 대해 질문드립니다.while의 ()안에는 참 또는 거짓으로 판단할 수 있는 조건이 들어갔던 것 같은데참, 거짓이 아님에도 위와 같이 활용될 수 있는 것은 어떤 이유인가요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 맞왜틀 질문있습니다.
http://boj.kr/2e98ca47102b49eeb4fa155c42e1ce1e예제 실행시 알맞게 나오고 문자열*문자열에 대해 간단하게 테스트 했을 때도 제대로 나오는데 어떤 점이 잘못되었는지 판단이 잘 안생깁니다 ㅠㅠ한번 확인해주시면 감사하겠습니다!
-
해결됨코딩테스트 [ ALL IN ONE ]
[코테 적용] 👉 [3번 문제] 완전탐색 (DFS, BFS) (전반부)
[코테 적용] 👉 [3번 문제] 완전탐색 (DFS, BFS) (전반부)27분에 엣지를 10^6이 될 수 도있는데 제약조건에서 10^3이라고 하셨는데요.방안에 키도 1000개 있고 방도 1000개있는건 알겠는데 엣지 구하는 공식이 노드와 간선의 수를 더하는건가요?
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
12번 암호문 런타임에러
14e972338646 import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner kb = new Scanner(System.in); int num = Integer.parseInt(kb.nextLine()); String str = kb.nextLine(); solution(str, num); kb.close(); } private static void solution(String str, int num) { List<String> binlist = new ArrayList<>(); for (int i = 0; i < str.length(); i += (str.length() / num)) { int end = Math.min(i + str.length() / num, str.length()); binlist.add(str.substring(i, end)); } for (String each : binlist) { StringBuilder tmp = new StringBuilder(); for (char mos : each.toCharArray()) { if (mos == '#') tmp.append(1); if (mos == '*') tmp.append(0); } binlist.set(binlist.indexOf(each), tmp.toString()); } for(String each : binlist){ solution2(each); } } private static void solution2(String bin) { int ascii = Integer.parseInt(bin,2); System.out.print((char)ascii); } } 다른 질문 글에도 런타임 에러 질문이 있는거 같은데 명확한 답변을 못 찾아 글을 올려봅니다. 12번 암호문제구요.2,3,4,5 테스트 케이스 다 통과했다는데 1번 테스트케이스에서 런타임에러가 나옵니다.다른 글에서 보니 1번은 문제에서 제시한 테스트케이스라는데 로컬에서는 정상 작동을 확인했습니다. 어떤 부분이 문제일까요? 런타임에러가 어떤 상황인지도 알고 싶습니다.
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
5번 채점파일에 문제가 있는거 같습니다.
#include <iostream> #include <string> using namespace std; int main() { string num; char mw; int i, age=0; getline(cin, num); int n = num.find("-", 1); if(num[n+1] == '1') { mw = 'M'; age = 2019 - (1900 + ((num[0]-48)*10 + (num[1]-48))); } else if( num[n+1] == '3') { mw = 'M'; age = 2019 - (2000 + ((num[0]-48)*10 + (num[1]-48))); } else if(num[n+1] == '2') { mw = 'W'; age = 2019 - (1900 + ((num[0]-48)*10 + (num[1]-48))); } else if(num[n+1] == '4') { mw = 'W'; age = 2019 - (2000 + ((num[0]-48)*10 + (num[1]-48))); } cout << age+1 << " " << mw; }5번에서 제가 작성한 코드인데요. 채점이 Exception.Tostring오류로 아예 채점이 안돼서 직접 In,out 파일을 넣어가며 비교를 해봤는데 오류없이 정답이 잘 나오더라고요. 이 부분 혹시 확인 가능할까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
백준 1620 맞왜틀 질문있습니다.
안녕하세요 선생님.출력까진 제대로 잘 찍히는데, 시간초과로 통과하지 못하고 있습니다.어떤 이유로 시간초과인지 파악이 안되서 질문드립니다.https://www.acmicpc.net/source/71167582
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-K 시간초과 질문입니다.
http://boj.kr/5308ff055fe74404b72f7784fa4cd8c4강사님 코드랑 거의 흡사한데왜 시간초과가 나는지 모르겠습니다.제가 봤을 땐 불필요한 로직이 없어보이는데 이유가 궁금합니다..항상 좋은 강의 감사드립니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
slice 활용
정답 코드 중에서while(p1<n) answer.push(arr1[p1++]);while(p2<n) answer.push(arr2[p2++]);대신 if (a < n) answer.push(...arr1.slice(a)); if (b < n) answer.push(...arr2.slice(b));slice 활용해서 풀어도 괜찮을까요? (a는 p1이고, b는 p2입니다)
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
k번째 수 질문드립니다
여기서 n을 input으로 받아서 활용을 안 하고 있는 거 같은데그러면 사용자의 입력에 따라 n이랑 리스트 a의 개수가 다를 수도 있는 거 아닌가요?
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
슬라이딩
이미 알거 같지만 한 번 더 질문을 해볼게요 !!슬라이딩 유형은 미리 셋팅이 있어야 하는 것인가요?? 또한 import java.util.*; class Main { private int[] solution(int n, int m, int[] arr) { HashMap<Integer, Integer> map = new HashMap<>(); int index = 0, lt = 0; int[] answer = new int[n - m + 1]; while(lt < n - m + 1) { for (int rt = 0; rt < m; rt++) { map.put(arr[lt + rt], 1); } lt++; answer[index++] = map.size(); map.clear(); } return answer; } public static void main(String[] args){ Main T = new Main(); Scanner in = new Scanner(System.in); int n = in.nextInt(); int m = in.nextInt(); int[] arr = new int[n]; for(int i = 0; i < n; i++) { arr[i] = in.nextInt(); } for(int a : T.solution(n, m, arr)) { System.out.print(a + " "); } } } 이렇게 풀면 시간 복잡도가 O(N^2) 이라서 시간 초과가 일어나는 것이죠 !?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
BFS x,y 축을 반대로 사용하시는 이유에관해 질문 있습니다.
안녕하세요 선생님! 좋은강의 만들어 주셔서 감사합니다. 다름아니라 BFS 를 비롯해서 2차원 배열을 다룰때 선생님께선 x,y 축을 반대로 사용하시는 것 같은데 개인적으로 왜 이러한 방식을 사용하시는지 궁금합니다.!감사합니다.!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-E
if(ret.size()) cout << ret << "\n"; 이 부분에서 ret.size()가 의미하는 부분을 정확히 모르겠습니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
해당 강의 코드에서 16-17번째 줄 코드 질문
안녕하세요 강의 듣다가 궁금한점이 있어서 질문 드립니다..!해당 강의 16분 37초 기준으로 16-17번째 줄 코드를 보면if(j!==i && (product[j][0]+product[j][1])>money) break; if(j!==i && (product[j][0]+product[j][1])<=money){이렇게 적으셨는데 break 하는 부분에 꼭 굳이 j!==i 도 적어야하나요 ??저의 경우function solution(bud, product) { let answer = 0, total = product.flat().reduce((prev, curr) => prev + curr); product.sort((a, b) => a[0] + a[1] - (b[0] + b[1])); for (let i = 0; i < product.length; i++) { // 50% 할인 쿠폰 적용할 상품 for 문 돌리기 let money = bud - (product[i][0] / 2 + product[i][1]); // 사용 가능한 금액 let cnt = 1; // 할인받은 애는 되니까 1 시작 for (let j = 0; j < product.length; j++) { if (i === j) continue; if (money < product[j][0] + product[j][1]) break; money -= product[j][0] + product[j][1]; cnt++; } answer = Math.max(answer, cnt); } return answer; }이렇게 i===j 를 만나면 continue 로 하고 예산이 넘어갈때만 break 두돌록 했는데 이렇게 잓성해도 괜찮을까요 ?
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
재귀대신 스택으로 구현하면 안될까요?
이 문제의 재귀는 이해가 됬지만, 다른 문제들에서 마주치는 재귀함수들은 손이 잘 안가고, 항상 남의코드를 봐야만 이해가 되더라구요.여기서 dfs함수를 스택으로 구현하면 라인이 더 길어져 재귀보다는 깔끔하지가 않은데, 이해 및 구현이 쉬운거 보다 명확한거 같은데, 코딩테스트의 재귀들은 모두 스택으로 구현하면 어떨지 궁금합니다.
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
[활용(바텀업DP)] 8:08, 10:55
안녕하십니까 코딩센세! 이번에도 어김없이 질문 드리고 싶은 부분이 있어서 질문글을 남겨봅니다. 활용(바텀업 DP) 수업에서, 8:08초와 10:55초 에서 작성하신 if문이 잘 와닿지가 않습니다. 8:08초의 경우, if idx+ interview[idx][0] > N 으로 작성하셨는데요. 설명 역시 논리적으로 다가왔습니다. 당연히 문제에서 주어진 N의 범위보다 크다면 인덱싱이 불가능할테니 idx보다 더 뒤에 있는 dp[idx+1]의 값으로 할당하는 거라고 이해했습니다. 문제는 10:55초 입니다. 작성하신 코드는 if weight < B 인데요. 부연 설명은 "가방의 무게보다 작으면 예외 처리를 한다"라고 이해했습니다. 문제의 요구사항에 따르면 가방의 무게보를 초과했을 때 예외처리를 해야 하지 않나? 라는 의문이 들었는데요. 아직 의문을 해결하지 못하여 선생님의 코드가 잘 이해가 되지 않는 상태에 있습니다... 저의 질문을 읽어주신다면, if weight < B 라고 조건을 걸어야 하는 부분에 대해 조금 더 상세한 설명을 부탁드립니다! p.s. 선생님 혹시 7강에 대한 정답 코드는 볼 수 없는건가요? 수업자료에 작성되어 있지 않아서 문의드립니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
BFS 당근마켓 승원이 문제 질문이 있습니다!
안녕하세요! 큰돌님. 문제를 풀다가 자꾸 visited 배열에 오버플로우가 일어나는 것 같아서 예시 코드와 비교해 봤더니, 큰돌님은 max_n = 104로 배열의 크기를 최대로 정의 해 놓으셨더라구요.그래서 큰돌님 처럼 다음과 같이 배열의 크기를 최대로 해놓고 하니, 문제가 해결되었습니다.const int max_n = 104;저는 입력받는 코드를 따로 만들지 않아서, 크기를 예측할 수 있는 코드여서 5X5 로 정의를 해놓았는데, 왜 오버플로우가 일어나는 지 궁금합니다! 제가 작성했던 코드 첨부하겠습니다.// Online C++ compiler to run C++ program online #include <bits/stdc++.h> using namespace std; const int max_n = 104; int dy[4] = {-1, 0, 1, 0}; int dx[4] = {0, 1, 0, -1}; int main() { int N = 5; int M = 5; int x,y; int visited[N][M] = {0,}; //방문 노드 //시작 지점 int sx = 0, sy = 0; //끝 지점 int ex = 0, ey = 4; //MAP int map[N][M] = { {1,0,1,0,1}, {1,1,1,0,1}, {0,0,1,1,1}, {0,0,1,1,1}, {0,0,1,1,1} }; queue<pair<int, int>> q; //깊이 탐색을 위한 큐 visited[sy][sx] = 1; // start 위치 방문 처리 q.push({sy,sx}); while(q.size()) { tie(y,x) = q.front(); q.pop(); for(int i = 0; i < 4 ; i++) { int ny = y + dy[i]; int nx = x + dx[i]; if(ny < 0 || ny >= N || nx < 0 || nx >= M || map[ny][nx] == 0) continue; if(visited[ny][nx]) continue; visited[ny][nx] = visited[y][x] + 1; q.push({ny, nx}); } } printf("%d\n", visited[ey][ex]); // 최단거리 디버깅 for(int i = 0; i < N; i++){ for(int j = 0; j < M; j++){ cout << visited[i][j] << ' '; } cout << '\n'; } return 0; }
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
다른 풀이
강의 보기전에 혼자 풀어보았는데 저의 경우에는 미리 순위를 추출해서 result ㄹ라는 변수에 저장한뒤 for문을 돌려서 result 에 있는 순위를 비교해서 답을 내도록 했는데 혹시 틀렸거나 비효율적이라면 어떤 점이 문제인지 알려주시면 감사하겠습니다..!function solution(test) { let a = test.length, b = test[0].length; let result = Array.from({ length: b + 1 }, () => []); // [[], [], [], [], []] let answer = 0; for (let x of test) { // [3,4,1,2] for (let i = 0; i < b; i++) { result[x[i]].push(i + 1); } } for (let i = 1; i < b + 1; i++) { // 0~4 for (let j = 1; j < b + 1; j++) { // result[i] 랑 result[j] 비교 if (i === j) continue; let isMento = true; for (let n = 0; n < a; n++) { if (result[i][n] <= result[j][n]) { isMento = false; break; } } isMento && answer++; } } return answer; } let arr = [ [3, 4, 1, 2], [4, 3, 2, 1], [3, 1, 4, 2], ]; console.log(solution(arr));
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
따로 function 빼기
제가 강의 듣기 전function solution(num) { let answer = []; for (let x of num) { let isPrime = true; x = Number(x.toString().split("").reverse().join("")); if (x <= 1) continue; for (let i = 2; i <= x / 2; i++) { if (x % i === 0) { isPrime = false; break; } } isPrime && answer.push(x); } return answer; } let arr = [32, 55, 62, 20, 250, 370, 200, 30, 100]; console.log(solution(arr)); 이런식을로 풀었는데영상에 보니까 isPrime(n) 을 따로 빼서 하신것같은데이렇게 함수를 따로 빼야하는 이유가 있는건가요??
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
질문
제가 영상 보기 전 혼자 풀어보았는데function solution(n, arr) { let answer = 0, max_sum = 0; for (let x of arr) { let sum = 0, temp = x; while (temp) { sum += temp % 10; temp = Math.floor(temp / 10); } if (max_sum < sum || (max_sum === sum && answer < x)) { answer = x; max_sum = sum; } } return answer; } let arr = [128, 460, 603, 40, 521, 137, 123]; console.log(solution(7, arr)); 저는 if 문을 (max_sum < sum || (max_sum === sum && answer < x)) 이렇게 하나로 묶어서 썼는데 괜찮을까요 ? 그리고 선생님께서 max를 초기화할때 Number.MIN_SAFE_INTEGER 로 하셨는데 어차피 각자리수의 합이 0보다는 클것이라는 생각이 들어서 저의 경우엔 0으로 초기화 했는데 괜찮을까요?