묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 리뷰복습하다가, 발견했습니다
최근에 다시 자바스크립트로 돌리면서, 기존에 파이썬으로 했던 것들 다시 모두 자바스크립트로 풀어보면서 문제 풀어보니, 발견했습니다.이거 첫번째 가정을, 그리디로 접근하면 해결 안되는 문제인것같습니다. 이후 가정들은 당연히 그리디 관념으로 최적값 찾을 수 있는데, 첫번째 가정부터 그리디로 접근하면 해결되는 문제가 아니라서 어긋나기때문에, 그리디관념이 통하지 않는 문제인것같습니다.완전탐색해버리거나, 시간 더 줄이려면 백트래킹 가지치기 해야하는 문제인것같습니다. 입력입니다!7172 67183 65179 61178 62177 63170 72181 60 기존 풀이(무조건 183선발) 가 내주는 답 : 3감독 현수가 원할 것 같은 답 : 6그리디로 가장 키 큰 사람 무조건 선발하는 과정이 풀이에서 오류인것같습니다.183 선발 가정하고 cnt 값 구하고,그다음 181 선발 가정하고 cnt값 구하고,쭉 다음 순으로 선발 가정하고 cnt값 구하는데,만약 어떤 사람 선발 가정하고 cnt값 구하는데남은 사람 수 다 합해도 기존 Max cnt보다 적을 경우,백트레킹 가지치기로 break 혹은 return 끊어버리는게 맞는것같습니다. 풀이1. 이중포문const input = require("fs") .readFileSync("input.txt") .toString() .trim() .split("\n"); const n = parseInt(input[0]); const arr = Array.from(Array(5), () => []); for (let i = 0; i < n; i++) { arr[i] = Array.from(input[i + 1].trim().split(" ")).map((v) => parseInt(v)); } function solution(n, arr) { arr.sort((a, b) => b[0] - a[0]); let cnt = 0; let largest = 0; let res = 0; for (let i = 0; i < n; i++) { largest = arr[i][1]; cnt += 1; if (res >= n - i) { break; } for (let j = i + 1; j < n; j++) { if (arr[j][1] > largest) { largest = arr[j][1]; cnt += 1; } } res = Math.max(res, cnt); cnt = 0; } console.log(res); } solution(n, arr); 풀이2. DFSconst input = require("fs") .readFileSync("input.txt") .toString() .trim() .split("\n"); const n = parseInt(input[0]); const arr = Array.from(Array(5), () => []); for (let i = 0; i < n; i++) { arr[i] = Array.from(input[i + 1].trim().split(" ")).map((v) => parseInt(v)); } let cnt = 0; let res = 0; //const list = []; function DFS(s, weight) { if (s < 0) return; if (cnt + n - s <= res) { cnt -= 1; s -= 1; return; } for (let i = s; i < n; i++) { if (arr[i][1] > weight) { cnt += 1; //list.push(arr[i][1]); DFS(i + 1, arr[i][1]); //list.pop(); } } res = Math.max(res, cnt); //console.log(list); cnt -= 1; } function solution(n, arr) { arr.sort((a, b) => b[0] - a[0]); DFS(0, 0); console.log(res); } solution(n, arr);
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
c++ sort 알고리즘 질문드립니다.
안녕하세요, 선생님.숫자로 바꿔서 크기를 비교하는 경우에 Out of range 에러가 발생해서, 문자열의 크기를 비교하는 compare함수를 직접 구현을 해서 풀었습니다.그런데 제가 구현한 compare함수에서 비교하는 두 문자열이 같은 경우에, true를 반환하면 에러가 발생하고, false를 반환하면 에러가 발생하지 않는지 이유를 잘 모르겠어서 질문드립니다.감사합니다.http://boj.kr/667ee88dbe1f40dc88c2a27c2636868d
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
마구간 정하기 문제 질문드립니다.
강사님 마구간 문제에서, mid = 5 경우에 9번 마구간에 말을 배치하지 못한다고 말씀하셨는데, 그 이유는 문제에 어떤 부분에 포함되어있는 걸까요??각각의 말이 위치한 거리가 5를 넘어야 되는건가요????
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
map 과 filter 함수를 써봤는데, 이렇게 하면 효율적이지 않은가요?
for 문 돌리는게, method 돌리는것보다 빠르다고 하는데, method 들로만 사용하여 풀면 효율적이지 않은건가요?아래 코드로 진행해도 괜찮을까요? function solution(s){ let answer="" const lengths = s.map(str => str.length) const max = Math.max(...lengths) answer= s.filter(str => str.length === max).join('') return answer; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-H번 질문있습니다.
언제나 좋은 강의 감사드리고 좋은 답변 감사드립니다. 다름이 아니라, 6-H, 2776번을 풀었는데 함수의 입력 인자로 인해 시간 초과가 발생했습니다!시간 초과가 난 코드는 다음과 같습니다.http://boj.kr/991bd2528553446498f49861a7098e78그래서 강의 영상을 보고 난 후, 딱 한 줄에 차이점이 있다는 것을 알았습니다. 바로 이분 탐색 함수에 벡터 인자가 vector<int> v가 아니라 vector<itn> &v인 것인데요. &v, 즉 주소로 접근을 하지 않으면 시간 초과가 나는 이유를 알 수 있을까요? 감사합니다!
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
왜 오답인지 정말 모르겠습니다...
임시반장 정하기 문제에서import java.util.Scanner; public class Main { private static void solution (int num, int[][] arr){ int[][] test_arr = new int[num][5]; int[] result = new int[num]; for (int i = 0; i < 5; i++) { for (int j = 0; j < num-1; j++) { for (int k = j+1; k < num; k++) { if (arr[j][i] == arr[k][i]){ test_arr[j][i] = 1; test_arr[k][i] = 1; } } } } int result_index =0; int max = 0; for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) { if(test_arr[i][j] != 0){ result[i] += test_arr[i][j]; } } if (result[i] > max){ max = result[i]; result_index = i+1; } } System.out.println(result_index); } public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); int num = Integer.parseInt(sc.nextLine()); int[][] arr = new int[num][5]; for (int i = 0; i < num; i++) { String[] temp = sc.nextLine().split(" "); for (int j = 0; j < 5; j++) { arr[i][j] = Integer.parseInt(temp[j]); } } T.solution(num, arr); } }이런식으로 3개의 for문을 써서 해결했는데요 테스트케이스들은 다 통과하는데이라고 뜨네요 왜인지 이유를 모르겠습니다...
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
ret 변수가 이해가 가지 않습니다
안녕하세요 선생님!go 함수에서 ret=(ret*ret)%c; 인데예를 들어 go(2,4)->go(2,2)->go(2,1) 이라면go(2,1)은 2%c를 반환하여 ret=go(2,1)=2%c 가 되고 다음줄의 ret=((2%c)*(2%c))%c 가 되면 % 연산이 중복되는게 아닌가 하는 의문이 듭니다.그래서 ret=(ret*ret) 이 되어야 하는 것 같아서 돌려봤는데 TC는 통과되었는데 백준에서 틀렸다고 나와서 질문드립니다.
-
미해결코딩테스트 [ ALL IN ONE ]
심화 과정 커리큘럼 질문
안녕하세요. 좋은 강의 잘 보고 있습니다.혹시 심화 과정에서 순열, 조합은 따로 안 다루시나요?
-
해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
DFS와 BFS
문제를 보고 DFS로 풀어야 할지, BFS로 풀어야할지빨리 구분하는 방법이 있나요?그리고, 어떤 경우에는 DFS에서 재귀함수 호출 제한이 뜨는 건가요?감사합니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
시간초과 이유 해결
import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class Inflearn26 { public ArrayList<Integer> solution(int N, int[] A, int M, int[] B) { ArrayList<Integer> answer = new ArrayList<>(); for(int i=0; i<A.length; i++) { for(int j=0; j<B.length; j++) { if(A[i] == B[j]) { answer.add(A[i]); break; // 원소 중복을 허용하지 않음으로 공통원소를 찾으면 반복문 종료 } } } Collections.sort(answer); // Arrays.sort() 는 '배열'의 오름차순 정렬 return answer; } public static void main(String[] args) { Inflearn26 inflearn26 = new Inflearn26(); Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); int[] A = new int[N]; for(int i=0; i<N; i++) { A[i] = scanner.nextInt(); } int M = scanner.nextInt(); int[] B = new int[M]; for(int i=0; i<N; i++) { B[i] = scanner.nextInt(); } for(int x : inflearn26.solution(N,A,M,B)) { System.out.print(x + " "); // 공통 원소 출력 // 이 방법은 시간초과 걸림 } } }로 풀었는데 시간초과 오류가 뜹니다.어떤식으로 풀어야 해결이 가능한지 궁금합니다 .
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-H 성곽
http://boj.kr/12848c5737a747c6b107af81e35dbd5e 해당문제를 맞추긴 했는데92번째줄 코드를 원래if(check(k,i,j))로 작성하였을 때는 오류가 발생했습니다. 조금 설명을 드리면,0-북/1-동/2-남/3-서 > 시계방향으로 벽이 있는 지 체크하는 함수인데 connectedcomponent 내부에서는 제대로 작동하는데92번째줄 코드에서 사용하였을 때는 0,0일때 동쪽에는 벽에 없는데도 동쪽에 벽이있다고 확인됩니다...어떤 점이 잘못되었는지 모르겠습니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3 - D : 4179 질문있습니다
안녕하세요 좋은 강의 감사합니다.https://www.acmicpc.net/source/56355675저는 일단 dfs로 접근을 했는데 문제가 다른 정답들을 보았는데 bfs로 푸시더라구여dfs로는 재귀 호출이 많아서 못푸는 문제인건가요?재귀로 풀지 말지 결정하는 기준점이 따로 있을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 79페이지 질문이요!
교안 79페이지 2차원 배열 예제에서 for(int i = 0; i < 10; i++){ vector<int> vv; v.push_back(vv); }. 이 코드가 하는 역할이 어떤건가요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-C질문입니다.
http://boj.kr/44ff21fc286b45139debd5c16bd40506 -> 이 링크는 제가 못풀어서 구글링한다음에 푼 코드입니다. 틀렸다고 떠서 도저히 몰라 강의를 듣고 짠다음에 제출하니까 http://boj.kr/8de2f6940c8c44b8b28fbf87f206e9ce이것은 강사님 코드보고 제가 작성한 코드입니다. (맞았습니다 가 뜨는데 어디가 틀린것인지 모르겠습니다 ㅠ
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이 함수가 왜 돌지 않는지 모르겠습니다
n = int(input()) def func(v): if v == 1: return 1 if v == 2: return 2 if dp[v] != 0: return dp[v] else: dp[v] = func(v-2) + func(v-1) dp = [0] *(n+1) func(n) print(dp[n]) dp[v]!=0이 아니면 return dp[v]를 반환해주는 조건을 했는데 왜 오류가 뜨는지 모르겠습니다. nontype 과 nontype은 더할 수 없다는데 디버깅을 해봐도 모르겠습니다 ㅠㅠ
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이 문제도 섹션6의 동전교환 문제처럼
DFS로 풀 수 있는 문제인가요??개념이 레벨로 답을 찾는게 비슷해보여서요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6236번 질문있습니다!
안녕하세요! 큰돌님, 수업 잘 듣고 있습니다.http://boj.kr/b29b0acec19746ea9af01dde3a5a198c제가 이렇게 풀어봤는데요... hi는 100000 * 10000을 생각해서 1000000004로 설정했습니다. 테스트 케이스는 맞는데, 계속해서 틀리네요.. 이분탐색 개념이 아직 어려워 문제 푸는게 어려운 것 같습니다.이 코드의 문제점을 알고 싶습니다! 그리고 이런 경우에 답지와 강의를 보고 질문하는 것이 좋은지.. 아니면 바로 질문하는 것이 좋은지도 궁금합니다! 일단 지금은 강의도, 답지도 보지 않았습니다. 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5주차 개념강의 1931
https://www.acmicpc.net/source/share/0e6ab88a839b40ff93c8f3001f9755611931 질문있습니다. 제가짠 코드가 시간초과가 뜨는데 반복문이 O(N^2)번 돌기 때문에 10만 * 10만 이라서 시간초과가 뜨는것인가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6주차 개념강의 10분 14002 질문
http://boj.kr/233b91ddf6444ca98ad381224f218aa3 dp로 풀었습니다. 그리고 trace라는 배열에 조건에 만족하는 이전 값을 넣어서 추적할려고하는데 답은 나오는데 틀렸다고 뜹니다... 어디서 틀린것인지 모르겠습니다...
-
미해결코딩테스트 [ ALL IN ONE ]
자바스크립트 사용하는데
사실상 자바스크립트 object가 그럼 해시테이블이랑 유사하게 구현이 됐고 object를 사용하면 되는구나... 라고 생각하면 될까요?