묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
75. 최대 수입 스케쥴 sort
sort(T.begin(), T.end());하는 이유가 궁금합니다. 정렬 안해도 if(T[j].when<i) break;에서 걸러질텐데 앞에서 소팅하는 이유가 있는건가요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
제 실력으로 최대한 머리 짜내서 혼자 풀어 보았습니다. 너무 허접 할까요?
<script> function solution(arr) { const initialValue = 0; const result = arr.reduce((prev, current) => prev + current, initialValue); const overSum = result - 100; const pickNum = []; for (let i = 0; i < arr.length; i++) { for (let j = 0; j < arr.length; j++) { if (arr[i] === arr[j]) continue; if (arr[i] + arr[j] === overSum) pickNum.push(arr[i]); } } return arr.filter((val) => val !== pickNum[pickNum.length - 2] && val !== pickNum[pickNum.length - 1] ); } let arr = [20, 7, 23, 19, 10, 15, 25, 8, 13]; //let arr = [25, 7, 23, 19, 10, 55, 20, 8, 13]; //let arr = [33, 9, 23, 17, 10, 55, 20, 8, 13]; //let arr = [13, 9, 61, 17, 11, 22, 20, 8, 70]; console.log(solution(arr)); </script> 코드 설명reduce 함수로 먼저 모든 9명의 난쟁이 녀석들 합을 구합니다.난쟁이 합은 총 100이니까 9명의 난쟁이 합 - 100을 합니다. ( 100보다 작을순 없으니까)범인은 2명이니까 중첩 for문을 돌려서 두명의 합이 2번의 값과 같은 녀석을 구합니다. pickNum 배열에 첫번째 녀석과 두번째 녀석이 담깁니다.filter함수를 이용해서 첫번째 가짜 난쟁이 값과 두번째 가짜 난쟁이 값에 해당하지 않은 녀석들로 진짜 난쟁이들 배열을 구성합니다여러가지 테스트 케이스를 만들어서 해보았는데, 진짜 난쟁이들 잘 찾습니다
-
해결됨[파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
2644 촌수계산 문제에 관한 질문
선생님 안녕하세요!강의 너무 잘 듣고 있습니다!제가 2644번 문제를 혼자 아래 코드로 풀어보았는데저는 선생님께서 count변수를 dfs 함수 인자에 준 것과는 다르게 처음부터 전역변수로 설정해서 조건이 맞으면 count 변수를 1씩 증가시키는 방향으로 작성을 했는데요.이렇게 하니까 백준에서는 틀렸다고 나오더라구요.둘 다 if문 안에서 조건이 맞으면 카운트 변수를 1씩 증가시키는건 같은거라고 생각이 드는데 (물론 다르겠지만..)왜 카운트 변수를 인자로 넘겨줘야할까요? 감사합니다!
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
정렬 이유 질문
안녕하세요 문제에서 벽돌정보 순서대로 벽돌을 쌓아야 한다고 생각하고 문제를 풀었습니다. "최대 부분 증가수열" 문제와 유사하게 판단하고 비교 조건만 밑면사이즈와 무게 2개를 비교하는 조건으로 풀었습니다. 근데, 강좌를 들어보니 벽돌 정보 순서와 벽돌을 쌓는 순서는 상관없다는 설명이 없어서 좀 헷갈립니다. 혹시 어느 부분이 그런 의미를 포함하고 있나요? 코딩 문제는 아니고 문해력 질문이긴 합니다만, 문제를 잘 읽어야 코딩도 제대로 할수 있기때문에 질문 드립니다.특히 "각 벽돌은 입력되는 순서대로 1부터연속적 인 번호를 가진다." 라는 문구가 입력순서를 기준으로 벽돌을 쌓아야하는것으로 이해해서 문제 설명 부탁드립니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
자바 알고리즘 문제풀이 입문, 가장 짧은 문자거리 궁금한 점이 있습니다.
강사님 답변을 보면 처음에 int pos=1000;을 설정하고서 for반복문과 if구문을 이용해서 거리를 찾는데요.int[] answer = new int[s.length()];int p =1000;for(int i = 0; i<s.length(); i++) {if(s.charAt(i)==t) {p=0;answer[i] = p; }else {p++answer[i] =p;}이렇게 돼있습니다. 그런데 else에서 pos값은 처음 선언했던 1000인데 ++를 하면 1001이 되는 것 아닌가요? 그리고 궁금한점이 또 있습니다. taechermode이런 문자가 있다고 하고 e와의 거리를 찾는다고 하면answer[0]은 2가 나와야 하는데 저 식에서는 1이 나오지 않나요?(pos가 0이라고 가정할 때) 제가 잘못생각하는건지... 오류가 있다면 알려주세요
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
2개의 배열 대신 객체를 사용하는 방법도 괜찮은 방법일가요?
public void 최대점수구하기 (int L, int score, int time, ArrayList<Score> arr) {// c = 주어진 시간 (20분), n 은 주어진 문제의 갯수 if (time > maxTime) return; if (L == quizNums) {answer+= Math.max(score ,arr.get(L).score); }else {최대점수구하기(L + 1, score + arr.get(L).score, time + arr.get(L).time, arr); 최대점수구하기(L + 1, score, time, arr); }}이렇게 2개의 배열을 넘겨주는 대신 객체를 리스트에 담아서 사용하는건 어떤가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-I 탑다운 방식 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.http://boj.kr/2b3465bfb212482695e3993e7f8ba7f0 탑다운으로도 풀어보고 싶어서 시도해봤으나 실패했습니다.로직에 이상이 있는 것인지, 반례는 어떤 것인지 파악하는 것에 어려움을 겪고 있어 질문 드립니다.항상 감사합니다!
-
해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
제 풀이
안녕하세요. 선생님 강의 정말 잘 보고 있습니다. 저는 for문으로 4개의 합을 한꺼번에 계산했는데 시간복잡도는 O(n^2)로 같으니 괜찮은걸까요?그리고 알고리즘 공부가 처음이라 시간복잡도를 구글링해서 찾아봤는데.. 원래 강의에서 따로 설명하는 부분이 없는건지 아니면 진도가 좀 더 나가야 설명해주시는건지 궁금합니다~(split해서 자르지않고 바로 2차배열로 저장할 수 있네요.. 스캐너 메소드를 좀 더 공부해야겠습니다.) public class INF0209 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); sc.nextLine(); int[][] grid = new int[n][n]; for (int i = 0; i < n; i++) { String s = sc.nextLine(); String[] split = s.split(" "); for (int j = 0; j < n; j++) { grid[i][j] = Integer.parseInt(split[j]); } } INF0209 inf = new INF0209(); System.out.println(inf.solution(grid, n)); } public int solution(int[][] grid, int n) { int max = 0; for (int i = 0; i < n; i++) { int[] sums = new int[4]; for (int j = 0; j < n; j++) { sums[0] += grid[i][j]; sums[1] += grid[j][i]; sums[2] += grid[j][j]; sums[3] += grid[j][n-j-1]; } //최댓값 구하기 for (int sum : sums) { if(sum > max) { max = sum; } } } return max; } }
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
문제 풀이 질문 있습니다!
선생님 안녕하세요!일단 너무 훌륭한 강의 준비 해주셔서 감사합니다!너무 많은 도움이 되고 있습니다.제가 섹션 5까지는 혼자서 문제도 풀고 이해도 되는데섹션 6에 재귀함수 시작하고 나서 부터 문제 풀이가 너무 힘들어졌습니다. 원래 계획 했던 방법은 처음 부터 끝까지 다 완강한 후 제 힘으로 못 풀었던 문제들 다시 섹션 1부터 풀 계획이었는데섹션 6을 완전히 이해 못한채 다음 섹션을 가는게 맞는 것일지 모르겠습니다.일단 먼저 완강을 한 후 다시 처음부터 가는게 맞을까요? 아니면 섹션 1부터 섹션 5를 완벽히 다진 후 섹션 6-7을 가는게 맞을까요? 두서 없지만 답답해서 여쭤봅니다! 감사합니다!
-
해결됨코딩테스트 [ ALL IN ONE ]
10의 8승 시간복잡도 근본적인 이유
안녕하세요 강사님.코딩테스트를 준비하거나 시험을 치를 때 지켜야 하는 시간복잡도를 왜 10의 8승인건지 근본적인 이유를 알고 싶습니다.그냥 이 시간복잡도를 일종의 (관행적인 느낌의) 마지노선으로 두는 것인지요..
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1 - B 왜 틀렸는지 모르겠습니다 ㅠㅠ
저는 string이 아니라 char[] 로 받아서만들어 봤는데 왜 틀렸는지 잘 모르겠습니다 ㅠㅠ#include <bits/stdc++.h> using namespace std; int alphabet[26]; char input[100]; int main() { cin >> input; // a -> 97 for (int i = 0; input[i] != '\0'; ++i) alphabet[(int)input[i] - 97]++; for (int i = 0; i < 26; ++i) cout << alphabet[i] << " "; return 0; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-Q_1911 흙길보수 질문 있습니다
http://boj.kr/bbd43e4a75674d3eb7eb8f94b603239c저는 웅덩이가 이어져 있거나 웅덩이가 끝나는 곳 까지 합쳤을 때 판자의 길이이하라면 웅덩이를 서로 합치는 방식으로 코드를 작성했는데 어떤 점이 잘못된 것인지 모르겠습니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
시간복잡도 관련 질문드립니다.
질문드립니다. 시간복잡도 O(n) 라고 하셨는데 궁금한점이 있습니다,.for(int i=0; i<n; i++) { System.out.println(n);}이와같이 n개의 데이터를 받아서 처리하는경우라고 알고있는데요 for(char x : b.toCharArray()) { bmap.put(x, bmap.getOrDefault(x, 0) +1); } ====> n int L = b.length()-1; for(int i=0; i<L; i++) { amap.put(a.charAt(i), amap.getOrDefault(a.charAt(i), 0)+1); } =======> n int lt =0; for(int rt = L; rt<a.length(); rt++) { amap.put(a.charAt(rt), amap.getOrDefault(a.charAt(rt), 0)+1); if(amap.equals(bmap)) { answer ++; } amap.put(a.charAt(lt), amap.get(a.charAt(lt))-1); if(amap.get(a.charAt(lt))==0) amap.remove(a.charAt(lt)); lt++; } rt =====> n 이와같이 3개의 변수를 선언한경우도동일하게 O(n)이 되는건가요?보기만 봐서는 O(3n)의 느낌인데시간복잡도 계산방법과 해당 n 판별법이 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-C
http://boj.kr/3c3c09b8b7994f2aa915ac2c4916f166 dfs를 사용하여 visited도 똑같이 적용하여 풀었는데 6%에서 시간초과가 나네요... 큰돌님 코드도 dfs 기반의 코드 같은데 혹시 시간초과가 나는 이유가 있을까요..?
-
미해결자바 코딩테스트 - it 대기업 유제
문제 풀이 질문드립니다.
혼자 풀다가 막힌 문제인데 어떻게 풀어야 할지 몰라서 질문드립니다. 문제를 간략하게 설명하면, 문제가 n*n행렬이 나오는데 (0,0)에서 사람이 움직이는데, 움직이는 조건이 왼손을 터치할 수 있는 방향으로만 움직일 수 있습니다. (0,0)에서 (n-1,n-1)로 나가는 경로의 길이를 구하라. 입니다.만약 s에서 e로 간다면 답이 12가지 입니다.s가 사람 모양이고 왼손을 터치할 수 있는 곳만 움직일 수 있습니다. 레벨탐색으로 하면서 큐를 잡는데Queue<int[]> q = new LinkedList<>();q.add(new int[] {x,y,1}); // x와y는 좌표, 1은 왼손을 터치할 수 있다는 표시로 풀려고 했는데 풀리지 않았습니다. 솔루션이 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-N ret=0아니고 1로 초기화 해야되는 이유
가 뭘까요? ㅠㅠhttp://boj.kr/43e4d282dd784a6d9869b0bf2a3eb92e0으로 하면 틀리는데 1로 하면 맞네요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-C lo=mx로 안하면 틀리는 이유가 있나요?
lo=1로 하면 테케는 맞는데http://boj.kr/7ca5d79fc6c84d84be2e2cf475201488제출하니까 틀려서 질문 드립니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-V 문제 질문
안녕하세요 큰돌 선생님문제를 풀다가 막혀서 질문드립니다. 전체적인 로직은 선생님 코드와 비슷한것 같은데 29점에서 막힙니다. http://boj.kr/d71d2395bc9b4b61ad8153b14682dc35 저는 구조체를 만들지 않고 그냥 배열 4개를 만들어서 따로 값을 저장했습니다. 29점이 나오는데, N이 20을 넘어갔을때 런타임 에러에 걸립니다. 인덱스 참조할때 배열을 범위를 넘어가는 부분도 없는것 같고, 0으로 나누거나 그러지도 않았는데 혹시 어떤 부분이 잘못된것일까요?
-
해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
코딩 스타일 질문
선생님 안녕하세요! 강의 잘 듣고 있습니다 !! 코딩 스타일에 대해서 질문이 있습니다. 선생님 강의를 보니 map[30][30], ch[30]와 같이 선언을 주로 하시는것 같습니다. 하지만 문제에서는 정점의 수 범위가 최대 20이라서 30까지 필요해보이지는 않아서요.제가 아직 코딩테스트를 한번도 본 적이 없어서 잘 모릅니다. 회사를 다니면서 최대한 효율적으로 코드를 작성하다보니 요구사항에 맞는 크기로 사용하는 버릇이 있네요. 문제에 맞는 범위의 배열을 선언하고, 그래프 정점이 1 -> 2로 간다면, 선생님은 인덱스 번호를 1로 맞추시는데, 0은 사용하지 않고 낭비됩니다. 이런 사항은 코딩테스트에서 신경쓰지 않아도 될까요? 단순히 문제 해결을 위해 위 사항쯤은 무시하고 편하게 코딩해도 되는지 궁금합니다 !!#include <iostream> #include <vector> using namespace std; static vector<vector<int>> graph; static vector<bool> visited; static int minCost = INT_MAX; int N; void DFS(int v = 0, int cost = 0) { // v에 방문 visited[v] = true; // 지금까지 누적된 비용이 min보다 높다면 리턴 if (cost > minCost) return; // 목적징에 도착 if (v == N - 1) minCost = minCost > cost ? cost : minCost; else for (int i = 0; i < N; ++i) if (!visited[i] && graph[v][i] >= 0) { // v에 방문하기 DFS(i, cost + graph[v][i]); visited[i] = false; } } int main() { int M; scanf_s("%d %d", &N, &M); graph = vector<vector<int>>(N, vector<int>(N, -1)); visited = vector<bool>(N, false); int f, t, c; // from, to, cost for (int i = 0; i < M; ++i) { scanf_s("%d %d %d", &f, &t, &c); graph[f - 1][t - 1] = c; } DFS(); printf("%d", minCost); }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6주차 개념강의 2776번 문제 질문있습니다.
int check(int temp, vector<int> &v) // vector<int> v 로 쓸 때다른 부분은 블로그에 있는 코드와 동일하게 작성하고check 함수의 매개변수 부분에서 vector<int> &v를 vector<int> v로 바꿔서 쓰면답은 동일하게 나오는데 시간 초과가 나와서 틀리게 됩니다. 왜 시간이 더 길어지는지 알고 싶습니다.