묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
각 주차별 문제의 시간복잡도
각 주차별 문제들의 시간 복잡도는 안알려주시는 건가요?제가 계산한 게 맞는지 확인하고 싶어서 그렇습니다!
-
해결됨자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션 2, 1,2차원 탐색(봉우리)
선생님 안녕하세요 문제를 푸는 과정에서 궁금한 점이 생겨서 질문 드립니다.먼저 저는 문제에서 힌트를 얻어 기존의 배열의 테두리에 0을 추가해주고 풀었습니다.근데 arr.push / arr.unshift를 통하여 배열 상하단에 [0,0,0,0,0]으로 된 배열을 추가하고 난 뒤배열 안의 arr[i]의 배열에도 push, shift를 통해 0을 추가해줬습니다. 이 과정에서 동일하게 for문을 진행했는데추가해준 첫번째, 마지막 배열의 길만 9개가 되는데 왜 그런지 이유를 잘 모르겠습니다.다른 배열들은 push, unshift가 한번씩만 된 거 같은데, 추가해준 배열만 2번씩 된 거 같습니다. 이유가 무엇인지 알 수 있을까요?? 제가 잘못한 부분이 있는걸까요??<html> <head> <meta charset="UTF-8"> <title>출력결과</title> </head> <body> <script> function solution(arr){ let answer = 0; let newArr = new Array(arr.length).fill(0); arr.push(newArr); arr.unshift(newArr); for(let i=0;i<arr.length;i++){ arr[i].push(0); arr[i].unshift(0); } for(let i=0;i<arr.length;i++){ for(let j=0;j<arr[i].length;j++){ let res = arr[i][j]; if(i !== 0 && i !== arr.length - 1 && j !== 0 && j !== arr[i].length - 1){ if(res > arr[i+1][j] && res > arr[i-1][j] && res > arr[i][j+1] && res > arr[i][j-1]){ answer += 1; } } } } console.log(arr) return answer; } let arr = [ [5,3,7,2,3], [3,7,1,6,1], [7,2,5,3,4], [4,3,6,4,1], [8,7,3,5,2] ] console.log(solution(arr)) </script> </body> </html>
-
해결됨Do it! 알고리즘 코딩테스트 with JAVA
집합 표현하기(백준 1717) union 함수 질문
안녕하세요 강의 잘 보고 있습니다.강의를 보다가 질문이 생겨 질문드립니다.강의 영상에서 union 함수에서 a,b의 크기와 상관없이 a와 b가 다르다면 parent[b] = a; 라고하시는데이렇게 해도 되는 이유가 어차피 나중에 find 함수의 재귀함수부분 return parent[a] = find(parent[a]); 에서 경로 압축이 되기 때문에 크기 상관없이 parent[b] = a; 선언 해주신 건가요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드립니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. const input = `15 BACBACCACCBDEDE`.split('\n'); let arr = input[1].split(''); function solution(arr){ let studentMap = new Map(); let winner = ''; let maxNum = 0; for(let i = 0; i < arr.length; i++){ studentMap.set(arr[i], studentMap.get(arr[i]) +1 || 1); } let studentArr = [...studentMap] studentArr.forEach(arr => { if(arr[1] > maxNum){ maxNum = arr[1]; winner = arr[0]; } }) return winner; } console.log(solution(arr));
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드립니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. const input = `10 3 12 15 11 20 25 10 20 19 13 15`.split('\n'); let M = Number(input[0].split(' ')[1]); let arr = input[1].split(' ').map(str => Number(str)); function solution(arr){ let sumArr = []; let sum = 0; for(let i = 0; i < M; i++){ sum += arr[i]; } sumArr.push(sum); for(let j = M; j < arr.length; j++){ sum += arr[j]; sum -= arr[j-M]; sumArr.push(sum); } return Math.max(...sumArr); } console.log(solution(arr));
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이 코드도 괜찮을까요 ?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. const input = `5 5 1 3 1 2 3`.split("\n"); let M = Number(input[0].split(" ")[1]); let arr = input[1].split(" ").map((str) => Number(str)); function solution(arr) { let count = arr.filter((num) => num <= M).length; // 5 let p1 = 0; let p2 = 1; let sum = arr[p1] + arr[p2]; // 4 while (p1 !== p2) { if (sum < M) { count++; p2++; sum += arr[p2]; } else if (sum === M) { count++; sum -= arr[p1]; p1++; } else if (sum > M) { sum -= arr[p1]; p1++; } } return count; } console.log(solution(arr));
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이 코드도 괜찮을까요 ?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 수업해주셨던 코드랑 다른건 없을까요 ? const input = `8 6 1 2 1 3 1 1 1 2`.split("\n"); let M = Number(input[0].split(" ")[1]); let arr = input[1].split(" ").map((str) => Number(str)); function solution(arr) { let p1 = 0; let p2 = 1; let sum = arr[p1] + arr[p2]; let count = 0; while (p2 < arr.length) { if (sum < M) { p2++; sum += arr[p2]; } else if (sum > M) { sum -= arr[p1]; p1++; } else if (sum === M) { sum -= arr[p1]; p1++; count++; } } return count; } console.log(solution(arr));
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문있습니다!!
안녕하세요 선생님 저는 59번 문제를 참고하여 진행을 하였습니다. 제가 작성한 코드중에서 뭐가 틀린건지 봐주시면 감사드리겠습니다.틀린 부분을 잘 몰라 질문 올립니다.#include <iostream> #include <vector> using namespace std; int n, tatal = 0; int ch[11]; int a[11]; void DFS(int L, int sum) { int sum2 = 0; if (L == n + 1) { for (int i = 1; i <= n; i++) { if (ch[i] == 1) { sum = sum + a[i]; } if (ch[i] == 0) { sum2 = sum2 + a[i]; } } if (tatal - sum == sum2) { cout << "YES"; } else { cout << "NO"; } } else { ch[L + 1] = 1; DFS(L, sum); ch[L + 1] = 0; DFS(L, sum + a[L]); } } int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; tatal = tatal + a[i]; } DFS(1, 0); //시작점 합 }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
unique 교안 s 벡터 erase 질문
vector<int> s {4, 3, 3, 5, 1, 2, 3};s.erase(unique(s.begin(),s.end()),s.end());for(int i : s) cout << i << " ";의 결과가4,3,5,1,2(,2,3 제거) 이렇게 되어야 하지 않나요?왜 4,3,5,1,2,3으로 나오는 건지 잘 모르겠습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
재귀를 이용한 순열 코드 질문
재귀를 이용한 순열 코드를 학습하면서 이와 관련된 백준 문제를 풀어보려고 하였습니다!백준 15649 N과 M(1) 문제 같은 경우 순열을 출력하는 문제여서 학습한 코드를 사용하면가능할 것이라고 생각했습니다. 그런데 교안에 있는 코드는 순열의 오름차순이 보장이안되는 것 같습니다. 교안에 있는 코드를 최대한 활용해서 백준 15649번 문제를 풀고 싶은데, 순서가 오름차순이 되도록 순열을 출력하려면 교안의 코드를 어떻게 수정해야 할지 모르겠습니다!https://www.acmicpc.net/problem/15649
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
정렬을 꼭 해야하는 이유
정렬을 하고 안하고 정답이 다르게 나오는데 그 이유가 무엇인가요??완전 탐색이라 모든 경우를 탐색하는데 정렬을 해야하는 이유가 궁금합니다!!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-G 자료형 질문
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<vector> #include<algorithm> #include<queue> #include<numeric> #include<map> #include<cstring> using namespace std; typedef long long ll; long double X, Y; int Z; bool check(ll mid) { double total = X; double win = Y; total += mid; win += mid; int num = (win / total) * 100; return Z < num; } int main() { cin >> X >> Y; Z = (Y / X) * 100; int start = 1; int end = 1000000000; int ans = -1; while (start <= end) { ll mid = start + end; mid /= 2; if (check(mid)) { ans = mid; end = mid - 1; } else start = mid + 1; } cout << ans; return 0; } 다음과 같이 작성했습니다.Z = (Y / X) * 100;이 부분에서 X,Y가 double이면 오답long double이면 정답이 나옵니다 .double로 선언하면 어떤 문제점이 존재하나요??
-
해결됨코딩테스트 [ ALL IN ONE ]
a52447879@gmail.com로 노션 공유 요청 확인 부탁드립니다.
메일함에서 확인이 안됩니당
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-q 질문
http://boj.kr/8eda4400f8474a6daf339737ce6eda82선생님 제가 dfs시 n*m범위를 벗어나면 1을 return하는 코드를 짜보았습니다. 그런데 범위에 벗어나면 이라는 if 문에 제 코드가 접근을 못합니다. 혹시 이유를 찾아주시면 정말 감사하겠습니다!!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8 - G 탑다운 방식으로는 안될까요?
안녕하세요!17623번 괄호 문제를 풀다가 어려운 점이 생겨 질문드리게 되었습니다. 저는 탑다운 방식으로 접근을 해보았는데요. 괄호를 넣을 수 있는 경우의 수에 따라 dmap값을 비교하여 최소값을 찾는 방식으로 풀어보았습니다. 하지만 서브태스크3을 통과하지 못하네요. 무엇이 문제일까요...? 고민해보아도 쉽게 찾아지지 않습니다. #include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; int T; string dp[1001]; bool check(string before, string after){ if(before == "" && after == "") return false; if(before == "") return true; if(before.size() > after.size()) return true; else if(before.size() < after.size()) return false; return before > after; } string go(int num) { if(num == 0) return ""; if(dp[num] != "N") return dp[num]; if(num - 1 >= 0) // 1빼기 -> 0이 아니라면 무조건 통과하는 조건 { // dp[i]에 직접 값을 넣는다. string temp = go(num - 1); if(check(temp + "12", "12" + temp)) dp[num] = "12" + temp; else dp[num] = temp + "12"; } if(num - 2 >= 0) // 2빼기 { string temp = go(num - 2); if(check(dp[num], temp + "34")) dp[num] = temp + "34"; if(check(dp[num], "34" + temp)) dp[num] = "34" + temp; } if(num - 3 >= 0) // 3빼기 { string temp = go(num - 3); if(check(dp[num], temp + "56")) dp[num] = temp + "56"; if(check(dp[num], "56" + temp)) dp[num] = "56" + temp; } if(num % 2 == 0) // 2로 나눔 { string temp = go(num / 2); if(check(dp[num], "1" + temp + "2")) dp[num] = "1" + temp + "2"; } if(num % 3 == 0) // 3로 나눔 { string temp = go(num / 3); if(check(dp[num], "3" + temp + "4")) dp[num] = "3" + temp + "4"; } if(num % 5 == 0) // 5로 나눔 { string temp = go(num / 5); if(check(dp[num], "5" + temp + "6")) dp[num] = "5" + temp + "6"; } return dp[num]; } string getPassing(string num) { string s = ""; int i = 0; while(i < num.size()) { char digit = num[i]; string d = ""; if(digit == '1') d = "("; else if(digit == '2') d = ")"; else if(digit == '3') d = "{"; else if(digit == '4') d = "}"; else if(digit == '5') d = "["; else if(digit == '6') d = "]"; s += d; i++; } return s; } int main() { fill(dp, dp + 1001, "N"); cin >> T; for(int i = 0; i < T; i++) { int N; cin >> N; string answer = go(N); cout << getPassing(answer) << "\n"; } return 0; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-s
선생님 2s 문제에 입력이 653143645345라고 들어올경우. 한번에 가장 많은 컴퓨터를 해킹할 수 있는 컴퓨터의 번호는 1-3-5-4-6으로 5가지 입니다.이때 만약 선생님이 쓰신 코드처럼 dfs에 visited를 설정한다면 1-3-4-6을 탐색한후 1-3-5-4-6을 탐색하려면 4가 이미 visited로 겹치기에 1-3-5-4-6경로를 탐색을 안하게되는것 아닌가요??
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
새로운 배열 만들때 질문입니다
안녕하세요, 선생님1) m 변수에 바로 arr 정렬해서 넣어서 원래 값과 비교하면 왜 답이 안나오는 걸까요..? function sol(arr){let ans =[];let m = arr.sort((a,b)=>a-b);for(let i = 0; i < arr.length; i++){if(arr[i] !== m[i]) ans.push(i+1);}return ans;}let m = [120, 125, 152, 130, 135, 135, 143, 127, 160];console.log(sol(m)); 2) let m = arr; arr.sort((a,b)=>a-b); 이렇게 했을때도 답이 안나오는 이유는 무엇일까요?slice()로 복사해야하는 이유가 있나요?
-
해결됨IT 기업 취업을 위한: 코딩테스트 혼자서 정복하기 (C/C++)
혹시 이건 왜 안되는지 말씀해주실 수 있나요??
#include <stdio.h>int max(int x, int y) { if (x > y) { return x; } else if (y > x) { return y; } else { return x; }}int min(int x, int y) { if (x < y) { return x; } else if (y < x) { return y; }}int main(void) { int dp[19] = { 0,-1,-1,1,-1,1 }; int i = 0; for (i = 6; i < 19; i++) { if (dp[i - 3] < 0 && dp[i - 5] < 0) { dp[i] = -1; continue; } else if (dp[i - 3] >= 1 && dp[i - 5] >= 1) { dp[i] = min(dp[i - 5] + 1, dp[i - 3] + 1); continue; } else if (dp[i - 3] > 0 || dp[i - 5] > 0) { dp[i] = max(dp[i - 3] + 1, dp[i - 5] + 1); continue; } } for (i = 0; i < 19; i++) { printf("값:%d 개수:%d\n",i, dp[i]); } return 0;}
-
해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
[자릿수의 합] 질문입니다.
안녕하세요 계속 오류가 떠서 여쭤봅니다.이 코드는 어떤 부분이 잘못되었는지 잘 모르겠습니다. import sys import os current_path=os.getcwd() sys.stdin=open(current_path + "\\python\\코딩테스트 강의 내용\\01 코드 구현력\\복습 파일\\" + "input.txt", "rt") N=int(input()) num_arr=list(map(int, input().split())) def digit_sum(x): result=0 for idx in range(0, len(str(x))): result+=int(str(x)[idx]) return result # 각 자리수 더한 합 for idx in range(N): arrMax=-21470000000 answer=0 if digit_sum(num_arr[idx])>arrMax: arrMax=digit_sum(num_arr[idx]) answer=num_arr[idx] print(answer)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-F 맞왜틀 질문 있습니다ㅠㅠ
안녕하세요, 선생님! 많이 부족하지만 천천히 선생님 수업 따라가고 있는 학생입니다..다름이 아니라 해당 문제를 풀면서 선생님께서 제시해주신 반례나 백준 질문에 올라온 반례도 대입 했을 때 기대값을 잘 출력하고 있는데 왜 맞왜틀인지 모르겠습니다ㅠㅠ코드 한 번 피드백 부탁드립니다!소스코드 - http://boj.kr/9bc5b7b855044809bdbfa4d5762b69aa 만약N = 10M = 3J = 5 일 경우10 > 5 > 1 > 7 > 2 순으로 사과가 떨어진다고 가정 했을 때 그림으로 그려보면 아래의 이미지와 같이 바구니에 담을 수 있는 최소 이동값이 21 이 도출되지 않나 생각하는데, 혹시 제가 잘못 이해하고 있는걸까요?