묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드려요 ㅎㅎ
const solution2 = (arr, count = 0) => { for (let i = 0; i < arr.length; i++) { for (let j = 0; j < arr.length; j++) { const isTop = i === 0; const isBottom = i === arr.length - 1; const isLeft = j === 0; const isRight = j === arr.length - 1; const current = arr[i][j]; (isTop || arr[i - 1][j] < current) && (isBottom || arr[i + 1][j] < current) && (isLeft || arr[i][j - 1] < current) && (isRight || arr[i][j + 1] < current) && count++; } } return count; };
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
EDWIN, 코드리뷰 부탁드립니다.^^ Array.from 을 활용해 봤습니다.
const solution = (arr) => { const resultArr = [ ...arr, ...arr.map((_,location) => Array.from({length:arr.length}, (_,idx) => arr[idx][location])), Array.from({length:arr.length}, (_, idx) => arr[idx][idx]), Array.from({length:arr.length}, (_,idx) => arr[arr.length-idx-1][arr.length-idx-1]) ] return Math.max(...resultArr.map(list => list.reduce((pre, cur) => pre+cur, 0))) }
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
다른 방식으로 풀었는데 이 풀이도 성능이 괜찮을까요?
function solution(n, m) { const answer = []; const DFS = (num, combination) => { if (combination.length === m) { answer.push(combination.slice()); return; } if (num > n) return; DFS(num + 1, [...combination, num]); DFS(num + 1, [...combination]); }; DFS(1, []); return answer; } console.log(solution(4, 2));이전에 배웠던 방식처럼 해당 수를 포함하는 경우와 포함하지 않는 경우로 DFS를 호출하고 combination 배열이 길이가 m이면 answer에 push하도록 했습니다.이 방식으로 풀어도 정답 코드와 성능이 크게 다르지 않을까요?
-
해결됨자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
중첩반복문 해결
const solution = (arr) => { let cnt = 1; let rankList = {}; let sort = [...arr].sort((a, b) => b - a); sort.forEach( (point, idx) => point !== sort[idx - 1] && (rankList[point] = cnt + idx)); return arr.map((point) => rankList[point]); };중첩을 결하고자 위와 같이 풀어봤습니다. 평가를 부탁드립니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-P 꽃길 문제 풀이 질문드립니다.
안녕하세요 선생님. 풀이를 보지 않고 단순히 브루트포스로 전체를 돌려서 구현해보았습니다.저는 일단 조합으로 3개를 뽑는 3중 for문을 돌려서 꽃을 심을 수 있는 3 지점의 좌표를 구하고, 그 후 해당 좌표들을 상하좌우로 퍼트려 서로 겹치는지와 화단 범위를 벗어나는지를 체크하여 문제없이 3개가 심어진다면 해당 부분들의 가격을 더해서 값을 구하는 식으로 로직을 짰습니다.하지만 예제는 맞는데 제출하면 2%에서 틀린다고 나옵니다. 틀리는 부분을 찾지 못하여 질문드립니다.http://boj.kr/cc392b4733d94aa9a3f67b831d041932
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
영화 수집 제 그림과 설명이 이해가지 않습니다..
https://postfiles.pstatic.net/MjAyMTA1MTNfNzIg/MDAxNjIwODgyMDkwMTI3._oXnW6b77oEMkcdomjgB8NMLStKeMWOmLgQl1rrNGHQg.ZGawtod2AJSOLywq734qeiWpcteLFDIEhcJ438xtc44g.JPEG.jhc9639/%EC%8A%AC%EB%9D%BC%EC%9D%B4%EB%93%9C132.JPG?type=w966 영화수집 # 문제해석이 이해가 가지 않습니다. 왼쪽에 3 Block이 하나 있고 2 Block이 3 두개 쌓아져 있습니다. 좌우 빨간 화살표가 의미하는 것과 오른쪽에 그림을 조금 더 상세히 설명해주실 수 있을까요..?트리라는 것은 알겠는데, 작동하는게 이해가되지 않네요. 추가로 좌표 이동의 의미도 한번 더 설명부탁드리겠습니다. 감사합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8주차 그림 설명이 이해 안되요.
https://blog.naver.com/jhc96392~8 까지의 최소 인덱스를 계산 하는 예제가 이해되지 않습니다. 여기서 두번째부터 여덟번째까지 인덱스 중에 최소 값을 가지는 인덱스를 찾는 문제인건가요? 그렇다면 여덟번째 인덱스가 없어서 의하하구요.두 번째로, 세번째, 4번째, 6번째 인덱스만 비교한다는 것이 이해되지 않습니다. 부연: 아래 설명에 0~3까지의 요소값에서 level2에서 한번에 찾을 수 있다는 것은 이해가 됩니다. 왜냐면 level2 트리값이 이미 최소 인덱스를 들고 있기 때문입니다.
-
해결됨코딩테스트 [ ALL IN ONE ]
실제 사용 예시
linked list를 사용해야 하는 경우가 언제일까요? 실제 사용하는 문제를 보고 싶습니다제 생각에는 array list로 구현하고 visit같은 경우도 list slicing 후 +로 리스트를 합치면 N(1) 만에 가능하기 때문에 시간이 부족한 코테에서 언제 linked list가 꼭 필요할까 궁금합니다
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
임시 반장 - break를 하는 이유
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요~제가 문제의 요지를 잘 파악 못해서 그런거 같은데 break를 하는 이유가 뭔지 잘 이해가 안됩니다.7:50부분저같은 경우는 2학년(k)때 3번학생(j)과 4번학생(i)이 같고3학년(k)때도 3번학생(j)과 4번학생(i)이 같은 경우를 카운팅 했었는데요break를 해야 한다는걸 문제의 어떤 줄을 보고 바로 깨달을 수 있을까요? 같았던 횟수를 구하는게 아니고, 같았던 학생의 명수를 구하는거라서 한번 같았으면 break하는거라고 이해하면 되는게 맞을까요? 다시 말해서, i와 j가 고정된 상태에서 k를 순회하는 중에 한번이라도 같으면 break를 하면 되는건가요? -- 그리고 추가 질문으로if ( i != j )를 안해도 된다고 하셨는데, 이 조건문을 추가함으로써 순회하는 과정을 일부 제외해서 성능이 더 좋아지지 않을까 생각해보는데 이런 생각도 맞는지 궁금합니다! 이미 for문의 조건문으로 설정된 부분이라 if문을 걸어도 시간복잡도에 영향은 없나요?
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
임시반장 오답케이스가 되는 이유를 잘 모르겠습니다..
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의를 듣기전에 풀었는데, 3개는 맞는데, 정확도가 떨어지는 코드라고 나와서 왜 해당 코드가 오답케이스가 있는지 잘 모르겠습니다 ㅠㅠ혹시 어디가 잘못된건지 여쭤봐도 될까요?package Array.임시반장_정하기; import java.util.HashSet; import java.util.Scanner; import java.util.Set; public class Main { public int solution(int n, int[][] arr) { int answer = 0; Set<Integer> duplicates = new HashSet<>(); for (int i = 0; i < 5; i++) { for (int j = 0; j < n; j++) { int duplicate = arr[j][i]; for (int k = 0; k < n; k++) { if (duplicate == arr[k][i] && j != k) { duplicates.add(arr[k][i]); } } } } if (duplicates.isEmpty()) return answer+1; for (int i = 0; i < n; i++) { int count = 0; for (int j = 0; j < 5; j++) { for (int x:duplicates) { if (x == arr[i][j]) count ++; } if (count == duplicates.size()) { answer = i; break; } } } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] arr = new int[n][5]; for (int i = 0; i < n ; i++) { for (int j = 0; j < 5; j++) { arr[i][j] = sc.nextInt(); } } System.out.println(T.solution(n,arr)); } }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
다익스트라 알고리즘
안녕하세요 큰돌님 곧 있으면 공채 코테 기간이라 많은 준비를 하고 있습니다! 다름이 아니라 다익스트라 알고리즘이라는 것이 가끔 코테에 나온다고 들었습니다.제가 지금 시간이 없어서 코테 시험 기간까지는 모든 문제를 풀진 못 할 거 같습니다.. 우선적인 것들 다시 풀어보고가야할 것 같은데혹시 다익스트라 알고리즘이 배우고 가야 할만큼 자주 나오는 유형인가요??
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드리뷰 부탁드립니다.
<html> <head> <meta charset="UTF-8" /> <title>출력결과</title> </head> <body> <script> function solution(s) { let answer; let stack = []; for (let x of s) { if (x === "+") { stack.push(stack.pop() + stack.pop()); } else if (x === "-") { stack.push(stack.pop() - stack.pop()); } else if (x === "*") { stack.push(stack.pop() * stack.pop()); } else if (x === "/") { stack.push(stack.pop() / stack.pop()); } else stack.push(Number(x)); } answer = stack[0]; return answer; } let str = "352+*9-"; console.log(solution(str)); </script> </body> </html> 위에 같이 풀어도 상관 없을까요? rt, lt변수를 사용하지 않고 그냥 바로바로 pop()한 값들을 계산하여 넣어줬습니다. 가독성이라던가 코드의 질(?) 측면에서 문제점이 있을까요? 감사합니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
봉우리 문제 질문있습니다. 강의와 다르게 풀어서 맞았는데 확장성? 이나 활용도에서 문제가 발생하는지 궁금합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요! 강의듣기 전에 풀이해본 내용인데요! 관련해서 질문이 있습니다! 아래 코드 처럼 풀었는데,경계값을 해주는걸 solution 내부 함수에서 해주는게 아니고, 입력값에서 배열 사이즈 조정하는걸로 풀면 다른 활용문제에서 어떤 문제가 발생할지 궁금합니다!저는 행, 열에 각각 +1, -1 해주면서 찾았는데, 이렇게 하면 강의에서 말씀하신 대각선 값 비교할때 문제가 있을까요?대각선의 경우 분기처리할때 각행과 열에 (-1, +1 ) (-1, -1) (+1, +1), (+1, -1)추가해서 체크해주는게 다른 활용 문제에서 어떤 문제가 발생할지 궁금합니다! 문제는 없지만 비효율적이고 가독성이 안좋아서 그런걸까요?3중 포문으로 하면 시간복잡도가 O(n^3)가 되서 성능이 떨어지는거 아닌지 궁금합니다. 아래 코드로 하면 O(n^2)이라서 더 빠를 것 같았는데 강의로 알려주신 코드보다 12ms 더 느리더라구요!import java.util.Scanner; public class Main { public int solution(int n, int[][] arr){ int answer = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { int tmp = arr[i][j]; // 첫째줄 조건은 열 체크. 둘째줄 조건은 행 체크 if (tmp > arr[i][j+1] && tmp > arr[i][j-1] && tmp > arr[i+1][j] && tmp > arr[i-1][j]) { answer ++; } } } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] arr = new int[n+2][n+2]; for (int i = 1; i <= n ; i++) { for (int j = 1; j <= n; j++) { arr[i][j] = sc.nextInt(); } } System.out.println(T.solution(n,arr)); } }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
queue를 이용하지 않고 풀었는데 틀려서 혹시 어느 부분이 틀렸는지 알 수 있을까요?
안녕하세요 큰돌님 혹시 제 코드 어떤 부분이 틀렸는지 알 수 있을까요?ㅠㅠqueue를 이용하지 않고 풀어봤습니다.http://boj.kr/2bbecad5eddd417e8fc0af56519e96ae
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
map을 사용시 시간초과가 되는데 이유가 뭘까요...?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.http://boj.kr/d466b4cc3d3048f990700e44cfc1de54 처음엔 위 링크와 같이 map으로 풀었는데 계속 시간 초과가 나더라구요... 예시 코드와 어느 부분에서 시간 차이가 나는 걸까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
split함수를 이용해서 구현했는데 제출 결과가 틀렸다고 뜹니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 큰돌 강사님, 아무리 생각해도 이 코드가 틀린 이유를 모르겠어서 질문하게 되었습니다. http://boj.kr/cfc58ee8fdc94e93a5b6ce83a2221a2b split함수로 "pi","ka","chu" 모두 없애고, str.length 비교로 정답 유무 확인할 수 있는거 아닌가요?예시 코드는 전부 다 맞는데,히든 케이스가 문제같아요. 어떤 예외처리를 못한걸까요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
런타임 에러가 뜨는 이유를 모르겠습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 큰돌 강사님, 출력하는 부분에서 런타임 에러가 뜨는 것 같은데 이유를 모르겠습니다. 확인 부탁드려요!http://boj.kr/d51f467f78ca414180b8b5f326707d20 cout << "["; for (int i = 0; i < D.size() - 1; i++) { cout << D[i] << ","; } cout << D[D.size() - 1] << "]\n";이 부분을 큰돌님이 올려준 코드로 바꾸면 작동 잘 되더라고요...vscode로 돌려보면 정답은 잘 나옵니다
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
최적화(재귀, 백트래킹의 경우의 수 ) 마지막 문제(냅색) 코드에 질문이 있습니다.
안녕하세요, 강의 잘 듣고있습니다. 다름이 아니라, 마지막 문제인 냅색 문제에서 물건을 안넣은 경우에 recur(idx +1, weight, value)가 아닌 recur(idx, weight, value) 로만 파라미터를 설정하신 이유가 궁금합니다!질문과 별개로 강의 내용이 정말 좋아서.. 당장 이번주 코딩 테스트인데 도움이 많이 될 것 같습니다. 좋은 강의 저렴하게 제공해주셔서 정말 감사합니다!
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드립니다.
function solution(s) { let answer = ""; let stack = []; for (let x of s) { if (x === "(") stack.push(x); else if (x === ")") { stack.pop(); } else if (stack.length === 0) answer += x; } return answer; }")"문자를 만나기 전까지 모두 push() 하는것이 아닌 알파벳 문자를 만났을때 스택에 괄호가 존재한다면 괄호로 감싸진 문자열이기 때문에 0일때만 answer에 더했습니다. 괜찮은 답일까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-W
안녕하세요 큰돌님!코드를 다음과 같이 짜봤습니다(짧으니 글에 올리겠습니다!) #include<bits/stdc++.h> using namespace std; int n, ret = -987654321; int a[100004]; int psum[200004]; void make(int interval) { for (int i = 0; i + interval <= n; i++)ret = max(ret, psum[i + interval] - psum[i]); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; psum[i] = psum[i - 1] + a[i]; } for (int i = 1; i <= n; i++)make(i); cout << ret << '\n'; }누적합을 이용해 인터벌 만큼 계산 해주면 시간 복잡도가 줄겠구나 싶었는데 그래도 이중 for문이라 시간 초과가 나더라구요실전에서 내가 큰돌님 같은 아이디어를 내는 사고를 할 수 있을까? 싶어 다른 풀이를 알아보니 DP 풀이가 있다고 하더라구요!이미 쓰였던 값을 따로 저장해놓고 해당 값이 나오면 캐싱(cashing) 느낌으로 쓰이는 방법이라고 하더라구요!혹시 해당 문제가 7주차 dp에도 있나 봤는데 따로 없는 것 같아서 큰돌님이시라면 DP로 어떻게 접근하실지 궁금해서 질문 남깁니다!