묻고 답해요
131만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
모든 경우의수를 구해보는 방식
선생님, 안녕하세요.괄호추가하기 문제를 풀어보고 있습니다.bfs는 아니고, 큐를 이용하기는 하는데 visited를 이용하지 않게 문제를 풀고 있어요.전략은 처음에 큐에 식을 넣고,큐에서 뺄 때, 수식을 계산한다음, 앞에서부터 괄호를 칠 수 있는 부분에 하나씩 괄호를 치고 넘기고. 이걸 반복하고 있습니다. 예를 들면, 9 3+8*7-9*2를 입력했을 때,3+8*7-9*2 (3+8)*7-9*2 3+(8*7)-9*2 3+8*(7-9)*2 3+8*7-(9*2) (3+8)*(7-9)*2 (3+8)*7-(9*2) 3+(8*7)-(9*2) 이런식으로 해서 모든 경우의 수를 구해서 비교하는 방식으로 하고 있는데요.예제는 잘 통과하는데, 제출하면 틀리네요...한번 봐주시고, 의견주시면 감사하겠습니다.또, 어떤 반례가 있을까요??http://boj.kr/0fced5587b8a4c5eb38406042eff5d6d 감사합니다~!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-D 질문드려요 (메모이제이션)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강의 잘듣고있습니다.! 메모이제이션 부분이 이해가 잘 안되서 질문드립니다.dp에 어떤 값이 들어가 있을 때 재귀 호출하지 않고 dp에 담겨져 있는 값을 리턴하는 것에 대한 추가 설명 가능할까요? #include <bits/stdc++.h> using namespace std; int T, W; vector<int> I; int mx = 0; int DP[1001][3][31]; // tree: 트리번호 // cnt: 움직인 횟수 int go(int idx, int tree, int cnt){ int another_tree; if (tree==1) another_tree =2; else another_tree =1; if (idx == T) return 0; // 기저사례 int &ret = DP[idx][tree][cnt]; // 메모이제이션 if (ret) return ret; if (cnt > 0) ret = max(go(idx+1, another_tree, cnt-1), go(idx+1, tree, cnt)) + (tree == I[idx]? 1:0); else ret = go(idx+1, tree, cnt) + (tree==I[idx]? 1:0); return ret; } int main(){ cin.tie(NULL); cout.tie(NULL); ios_base::sync_with_stdio(false); cin >> T >> W; I = vector<int>(T,0); for(int i =0 ; i < T; ++i){ cin >> I[i]; } cout << max(go(0, 2, W-1), go(0, 1, W)); return 0; } dp에 어떤값이 들어가있다는 것은 이미 한번 수행한 이력이 있는 정점이라는 의미로, 더 이상 아래 정점을 탐구할 필요가 없다 라는 의미겠는데.., 완전히 이해를 하지 못하여 질문드려요
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-C 질문
안녕하세요 선생님! 항상 수업 잘 듣고 있습니다다름이 아니라 저는 dp에 값이 있으면은 사이클이 생긴다는 가정으로 최대숫자를 반환해서 처리하였는데요.몇 번 시도하였는데 계속 틀림이 뜨네요 ^^;http://boj.kr/56bf4bf2cf4d411fb652d50f54160a7e그래서 선생님 답안을 보았는데 visited 배열을 따로 만드시고 나중에는 방문 미처리를 해주셨더라고요. 나중에 방문 미처리 해주시는 것이 이해가 잘 안가 왜 그렇게 해주셨는지 궁금합니다! 미리 감사드립니다~ 🙇♀
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
43번 이진검색에 대한 문의
문제가 순서가 바뀌는 것이 불가능하다고 나와있습니다.이분검색은 정렬된 자료를 이용해서 정렬하는것으로 알고 있는데 만약 곡 시간이 432324 이렇게 나와있다면 이분검색 자체를 못하는것 아닌가요???
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2 - O 질문
http://boj.kr/c19ff269920c4179b4e924f04e342db4안녕하세요 강사님 2 - O 문제를 2 - N 을 보고 비슷하게 풀어보려고 하는데 자꾸 segfault가 떠서 질문 드립니다. 혹시 stk에서 stk.top()함수가 빈 stk을 참조해서 이런 문제가 발생하나 해서 empty함수를 추가했는데도 같은 결과만 나오네요ㅠ
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드리뷰 부탁드립니다!
// 자릿수끼리의 합이 제일 많은 것을 출력. // 같은 경우 원래 숫자가 더 높은 쪽을 출력 function solution(n = 0, arr = []) { let answer = 0; let max = Number.MIN_SAFE_INTEGER; const splitNums = arr.map((val) => (val + "").split("")); for (let i = 0; i < splitNums.length; i++) { const temp = splitNums[i].reduce((prev, cur) => +prev + +cur, 0); if (temp > max) { max = temp; answer = arr[i]; } else if (temp === max) answer = arr[i]; } return answer; } console.log(solution(7, [128, 460, 603, 40, 521, 137, 123])); // 137 혼자 풀어봤습니다.. for문 안에 배열 메서드가 들어가는게 좀 이상한 것 같은데 이렇게 써도 무방한지 여쭙고싶습니다.혹은 수정할 점이 있다면 조언해주시면 감사하겠습니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-L 1987 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/7cda610bf53f47c1a737bb078ccc36b5 안녕하세요 큰돌님. 예제 뿐만 아니라 반례들도 모두 맞는것 같은데 채점을 하면 퍼센트도 안뜨고 바로 틀렸다고 뜹니다.. 어떤 부분이 틀렸는지 모르겠습니다. 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-L 질문 있습니다
이해하고 있는 단계입니다.cin >> y1 >> x1 >> y2 >> x2; 부분이 이해가 잘 가질 않습니다.cin >> x1 >> y1 >> x2 >> y2; 로 입력을 받아야 맞는 것이 아닌가요? 이게 오답인 이유를 잘 모르겠습니다..
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-K 질문이 있습니다.
팰린드롬의 앞부분 + 중앙 + 뒷부분 을 출력하는 코드를 만들었습니다.https://www.acmicpc.net/source/76353773vs에서 볼때는 반례가 없어보이는데 백준에서는 오답이라고 나옵니다. 어디가 잘못된걸까요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
혼자 푼 것 코드리뷰 부탁드립니다!
// 한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리 function solution(str = "", char = "") { let answer = []; let count = 0; for (let i = 0; i < str.length; i++) { if (str[i] === char) { count = 0; answer.push(count); } else { count++; answer.push(count); } } count = 1; for (let i = answer.length - 1; i >= 0; i--) { if (i > 0 && answer[i - 1] > count) { answer[i - 1] = count; count++; } else { count = 1; } } return answer; } console.log(solution("teachermode", "e")); // 1 0 1 2 1 0 1 2 2 1 0혹시나 반례나 수정할 곳 있으면 조언 부탁드려요!
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
Array 12) 멘토링 문제 짝 클래스 객체와 Map을 활용하는 풀이방식
public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int[][] arr = new int[m][n]; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { arr[i][j] = sc.nextInt(); } } System.out.println(answer(n, m, arr)); } static class Pair { int mento; int menti; @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Pair)) return false; Pair pair = (Pair) o; return mento == pair.mento && menti == pair.menti; } @Override public int hashCode() { return Objects.hash(mento, menti); } } private static int refactor(int n, int m, int[][] arr) { Map<Pair, Integer> map = new HashMap<>(); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { for (int k = j+1; k < n; k++) { Pair pair = new Pair(); pair.mento = arr[i][j]; pair.menti = arr[i][k]; map.put(pair, map.getOrDefault(pair, 1) + 1); } } } return (int) map.entrySet().stream().filter(entry -> entry.getValue() == m).count();; } }저는 위와 같이 짝에 부합하는 값들을 클래스를 통해 객체에 짝을 저장하고, 각 시험별 동일한 짝(객체)에 대한 중복을 제거함과 동시에 count값을 증가시키며 Map에 저장하는 방식으로 문제를 풀었습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
이해한게 맞는지 궁금해요!
결국 idx번째 비트를 끄려면, idx번째 비트만 꺼져있는 수와 and 연산을 한다라고 이해하면 될까요?그리고 idx번째 비트만 꺼져있는 수를 만들기 위해서는 idx번째 비트만 켜져있는 수를 만들고 ~연산을 통해 비트를 반전시킨다라고 이해했습니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
answer 변수 없이 풀기
function solution(n) { if (n == 0) return ""; return solution(Math.floor(n / 2)) + String(n % 2); }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-G 코드 질문 드립니다.
http://boj.kr/8f2c3b1fb5d5432fadeb0831025ed653 해당 코드로는 테스트케이스가 잘 작동하는데 어떤 부분을 놓친것 인지 궁금합니다 감사합니다 :)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-W 줄서기
안녕하세요. 큰돌 강사님, 해설이 이해가 되지 않아서 질문 드립니다. 역사 문제와 이 문제의 풀이 방법이 왜 다른 건지 궁금합니다. 역사문제의 경우 플로이드 워셜로 풀었었는데, 사건들의 전후 관계를 알고 있으니 ,역사 문제도 현재 풀이처럼 v[a]++, v[b]--; 로 풀면 안되나요?? 아래 코드가 전혀 이해가 되지 않습니다.. 앞에 있는 학생의 점수를 키우고, 뒤에 있는 학생은 줄이면 어떻게 1~N까지 카드 숫자를 나눠 갖나요??for (int i = 0; i < m; i++) { cin >> a >> b; v[a]++, v[b]--; } for (int i = 1; i <= n; i++) { v[i] += i; visited[v[i]]++; } 감사합니다 좋은 하루 보내세요
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이렇게 풀어도 될까요...?
function solution(n = 0, arr = []) { let answer = []; const sortedArr = [...arr].sort((a, b) => b - a); answer = arr.map((val) => sortedArr.indexOf(val) + 1); return answer; } console.log(solution(5, [76, 92, 92, 100, 76])); // 4 2 2 1 4 막 2중 for문을 돌릴지, 돌리게 된다면 동일 점수 사람끼리 같은 등수를 해주는 조건문 이것저것 생각하다가 이렇게 한번 작성해서 돌려봤는데 여러 케이스에 부합하는 것 같아서 여쭤봅니다!
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
k번째 수 문제 자체를 이해를 못하겠습니다.
문제가 무슨 말을 하는지 이해를 못하겠어요.다른분들은 어렵지 않게 이해를 하시는거 같은데, 코딩테스트 연습 - K번째수 | 프로그래머스 스쿨 (programmers.co.kr)이거랑 같은거 같은데,이거는 이해가 되거든요?근데, 지금 저 두번째 강의문제는 뭘 구하라는건지이해를 못하겠어요... 숫자배열은 어디있고, 범위를 지정하는 start end랑 k번째수가도대체 입력예제에서 어디 부분을 말하는거죠???
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-O 질문있습니다!
안녕하세요 큰돌님.강의를 수강하면서 질문이 있습니다.제가 몇시간동안 고민한 게 단 한 줄 추가로 시간초과 해결이 됬는데, 실전에서 이런 문제들을 만나면 과연 어떻게 해야할지 고민이 생기네요... 무작정 암기하는 방식은 공부가 아니라고 생각하는데 이런 문제들을 보면 또 암기가 맞다고 생각하게 되네요.큰돌님은 어떻게 생각하시는지 또 어떻게 공부 방향을 잡아야하는지 궁금합니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
격자판 최대합 테스트케이스 문제 있습니다.
반대 누적합에 대한 테스트케이스 예외가 없는거 같아요.public static void main(String[] args) { Scanner sc = new Scanner(System.in); int length = sc.nextInt(); int[][] intArr = new int[length][length]; for (int i = 0; i < length; i++) { for (int j = 0; j < length; j++) { intArr[i][j] = sc.nextInt(); } } System.out.println(answer(length, intArr)); } private static int answer(int length, int[][] intArr) { /* 대각선 누적합, 최대값 */ int xXSum = 0, xYSum = 0, max = 0; for (int i = 0; i < length; i++) { /* 행, 열 누적합 */ int rowSum = 0, colSum = 0; for (int j = 0; j < length; j++) { /* 각 행의 누적합 저장*/ rowSum += intArr[i][j]; /* 각 열의 누적합 저장*/ colSum += intArr[j][i]; } if (rowSum > max) max = rowSum; if (colSum > max) max = colSum; /* 대각선의 누적 합 저장*/ xXSum += intArr[i][i]; xYSum += intArr[length-1-i][length-1-i]; } /* 대각선 의 합 추가*/ if (xXSum > max) max = xXSum; if (xYSum > max) max = xYSum; return max; } }반대 대각선을 코드는 위 코드에서 바로 아래와 같습니다.xYSum += intArr[length-1-i][length-1-i];위에가 잘못 적용한 코드이고 (바로 위의 정대각선과 똑같은 작업을 하는것과 마찬가지입니다.)이것을 코딩채점사이트 상에 직접 돌려보면 정답으로 인정되지만 31 1 31 3 13 1 1이렇게 데이터 직접 넣어보면 9가 아닌 5가 최대값으로 출력됩니다.즉, 코딩채점에 반대 대각선에 대한 테스트케이스가 없다는 소리에요.xYSum += intArr[i][length-1-i];위 코드가 정답이고, 이렇게 했을때에는 처리가 되긴 되는데아무튼 현재 테스트케이스 상에 반대 대각선에 대한 누적합이 더 큰 경우가 없어서 처리가 안되고있습니다.그냥 반대 대각선 누적합 자체가 없는셈 치는거나 마찬가지에요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
질문있습니다.
http://boj.kr/efd11008ccc14646a364953dfec3e77c 가장자리의 얼음을 녹인다.백조끼리 이어져있는지 확인한다.이 두 가지 동작을 while로 돌리고 싶었는데 어느 부분이 틀렸는지 모르겠습니다...도와주세요