묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-L 시간복잡도 질문
http://boj.kr/75cc76adfce24cbd88595ea4ea999a5d안녕하세요 강사님 ㅎㅎ해당 강의 초반에 무식하게 풀었을 때의 시간복잡도가 (n * n-1 / 2)*n 이라고 설명하시는데 제가 혼자 문제풀 때는 다르게 계산을 했거든요...저는 연속된 수들의 곱이니까 이중 for문으로 for(int i=0; i<n; i++){ for(int j=i+1; j<n; j++){식의 연산이 필요하다 생각했고 여기다가 백트래킹으로 == 0일때 break 정도하는 조건까지만 넣었습니다. 이러면 등차수열의 합 정도의 시간복잡도가 되니 O(n^2)이고 n의 최대범위가 10000 -> 제곱은 1억 -> 1억에서 천만까지는 해볼만하다고 알려주셔서 위 생각의 흐름대로 문제를 풀었습니다. 혹시 제가 시간복잡도 계산을 잘못한건가요..?
-
미해결입문자를 위한 코딩테스트 핵심(이론과 문제풀이) [Python]
해시의 시간복잡도
강의에서 실무에서는 10~20개의 연결리스트만하기때문에 해시의 O(1)을 갖는다고 하셨는데,면접에서 물어볼경우는 O(n) 이라고 답하는게 맞을까요O(1)이라고 하는게 맞을까요? 실무에서는 제한을 두지만 여기서는 그런 제한을 두고 물어볼거라는 의도가 있을까? 해서요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
재귀함수로 순열구현하기 질문 있습니다 !
재귀함수로 순열을 구현해서 돌려보면312 다음에 321이 나와야 맞는데321 뒤에 312 가 나오는 현상이 있습니다. 전에 선생님께서 주신 코드도 같은 현상이 나오는데 어떻게 해야할까요 ㅠㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-I 나무심기 조그마한 의문이 있어 질문드립니다.
안녕하세요!8-I 나무심기 해설 코드를 보다 작은 의문점이 생겨서 질문드립니다!바로 중복된 좌표에 나무를 심는 경우인데요. 나무의 개수를 저장하는 부분인 update(treeCnt, num, 1)에서 좌표가 중복되는 경우에는 1이 아니라 나무의 개수로 갱신되어야 하지 않나하는 궁금증이 생겨버렸습니다. 중복되는 경우, 나무를 뽑고 다시 심는 개념으로 이해해야 하는 걸까요?제가 아직 펜윅트리를 완벽하게 익힌 것이 아니라...많이 헷갈립니다!#include<iostream> #include<vector> using namespace std; typedef long long ll; int N; vector<ll> t; vector<ll> tcnt; vector<ll> treeSum; vector<ll> treeCnt; ll answer = 0; void update(vector<ll> &tree, int i, int diff) { while(i < tree.size()) { tree[i] += diff; i += (i & -i); } } ll sum(vector<ll> &tree, int i) { ll r = 0; while(i > 0) { r += tree[i]; i -= (i & -i); } return r; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> N; t = vector<ll>(N + 1, 0); tcnt = vector<ll>(200004, 0); treeSum = vector<ll>(200004, 0); treeCnt = vector<ll>(200004, 0); for(int i = 1; i <= N; i++) { ll num; cin >> num; num++; t[i] = num; tcnt[num]++; if (i != 1) { ll l, r; ll value; l = sum(treeCnt, t[i] - 1) * t[i] - sum(treeSum, t[i] - 1); r = (sum(treeSum, 200004) - sum(treeSum, t[i])) - (sum(treeCnt, 200004) - sum(treeCnt, t[i])) * t[i]; value = l + r; if (answer == 0) answer = 1; answer = ((answer % 1000000007) * (value % 1000000007)) % 1000000007; } update(treeSum, num, num); update(treeCnt, num, 1); } cout << answer << "\n"; return 0; }
-
해결됨코딩테스트 [ ALL IN ONE ]
class LinkedList
안녕하세요! 좋은 컨텐츠 감사합니다. [질문]14:15에 등장하는 class LinkedList가 왜 object를 상속하나요? 없어도 되지 않을까 하는데, 무슨 이유가 있는 것인지 궁금합니다. class Node는 상속없이 작성되었기에, 그 차이가 더욱 궁금합니다. 감사합니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
5. K번째 큰 수(영상 후반 TreeSet 추가설명) - 강의 질문
안녕하세요.수업중 질문사항이있어서 문의드립니다.'5. K번째 큰 수' 강의 중 설명 부분에 대하여 의문점이 들었습니다.문제 설명 부분에 '만약 큰 수부터 만들어진 수가 25 25 23 23 22 20 19......이고 K값이 3이라면 K번째 큰 값은 22입니다.'라는 설명이 있는데, k번째로 큰값은 71로 수정되어야 할것같습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-E string() 함수? 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.멘토님 안녕하십니까?string()이게 생소해서 질문 드립니다.아래는 멘토님이 짜신 정답 코드 일부인데요string quard(int y, int x, int size){ if(size == 1) return string(1, a[y][x]); char b = a[y][x]; string ret = ""; for(int i = y; i < y + size; i++){ for(int j = x; j < x + size; j++){ if(b != a[i][j]){ ret += '('; ret += quard(y, x, size / 2); ret += quard(y, x + size / 2, size / 2); ret += quard(y + size / 2, x, size / 2); ret += quard(y + size / 2, x + size / 2, size / 2); ret += ')'; return ret; } } } return string(1, a[y][x]); } 2번째 줄과 마지막 줄에 string()를 써서1또는 0을 return한다고 강의에서 말씀하셨는데,string이 함수로 쓴다는건 처음알아서 생소해서 그런지 이해가 안갑니다.부가 설명을 해주실 수 있을까요? 또, 구글링으로 "c++ string()"정도로만 검색해도 자료가 잘 안나오던데, 제가 직접 찾아보려면 msdn? 어디서 찾아보면 좋을 지 조언 받을 수 있을까요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
가운데 문자 출력 이렇게 풀어도 될까요?
function solution (str){ let strArr = str.split(""); let length = strArr.length; let answer = ''; answer = length/2 !== Math.round(length/2) ? strArr[Math.round(length/2)-1] : strArr[length/2 -1] + strArr[length/2]; return answer;} console.log(solution("good"));
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
split() 시간 초과
안녕하세요!split() 함수를 알려주신 로직대로 짰는데 시간 초과가 뜹니다.왜 그런건지 알 수 있을까요?http://boj.kr/7c52cc03df5842a487e17a1b18df29fb 항상 좋은 강의해주셔서 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-c
http://boj.kr/f62ec3c209234df98988f6cc6d37ddee 선생님 안녕하세요 위 코드가 제 코드입니다.다름이 아니라 제 코드는 예제입력 4 실행시 두번째 인구이동에서 (1,2)->(2,2)->(2,1)이 되어야하는데 코드가 (2,2)에서 dfs를 타고 (2,1)로 넘어가지를 않습니다. 혹시 이유를 알려주시면 정말 감사하겠습니다!!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-G hi에 들어가는 초기값 질문
https://www.acmicpc.net/source/share/a683363852be4b508750d3f3382be974안녕하세요 강사님!강사님 풀이에서 X의 최댓값이 10억이니까 hi를 10억으로 놓는다는게 잘 이해가 가지 않습니다 ㅜ제가 갖고있는 의문점은 '게임을 10억판보다 더 해야 Z가 변하는 case도 있지 않을까?'인데 혹시 X의 최댓값이 10억인 경우 10억 판(승리) 안으로 z가 무조건 변한다는 것이 증명이 되는건가요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
질투심이 ~~일때
로 보는 건 그런가 보다 싶은데왜 질투심으로 보석을 나눠야 하는지 이해가 안 갑니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 불! 질문있습니다.
어느 부분에서 틀렸는지 잘 모르겠습니다.제가 놓친 부분이 강의에서 INF로 초기화하는 거라고 생각해서 보고 수정했었지만 똑같았습니다.그래서 원래 썼던 코드로 공유합니다.http://boj.kr/b143a73e068a49a9b8687b692265b563
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션 7 10번 미로탐색 반복 깊이 초과 에러
#my sol def DFS(x,y): global cnt if x>7 or y>7: return if x==7 and y==7: cnt+=1 else: for i in range(4): nx=x+dx[i] ny=y+dy[i] if maze[nx][ny]==0: maze[nx][nx]=1 DFS(nx,ny) maze[nx][nx]=0 if __name__=='__main__': maze = [list(map(int, input().split())) for _ in range(7)] maze.insert(0,[1]*7) maze.append([1]*7) for row in maze: row.insert(0,1) row.append(1) cnt=0 dx=[-1,0,1,0] dy=[0,1,0,-1] maze[1][1]=1 DFS(1,1) print(cnt) #solution dx=[-1,0,1,0] dy=[0,1,0,-1] def DFS(x,y): global cnt if x==6 and y==6: cnt+=1 else: for i in range(4): nx=x+dx[i] ny=y+dy[i] if 0<=nx<=6 and 0<=ny<=6 and maze[nx][ny]==0: maze[nx][nx]=1 DFS(nx,ny) maze[nx][nx]=0 if __name__=='__main__': maze = [list(map(int, input().split())) for _ in range(7)] cnt=0 maze[0][0]=1 DFS(0,0) print(cnt)위의 코드는 강의 듣기 전에 혼자 작성한 코드이고, 아래는 강의에서 알려주신 코드입니다. 두 코드가 접근 방식이 같은 것은 알고 있습니다. 그런데 제 컴퓨터에서 두 코드 모두 채점 프로그램을 돌렸을 때 결과 계산을 하지 못 합니다.(5초짜리로 해도 같고, 코드에 setrecursionlimit 추가해도 같음)import sys sys.setrecursionlimit(10**6)그리고 pdf 예제조차도 RecursionError: maximum recursion depth exceeded in comparison 에러가 납니다.(예제는 setrecursionlimit 추가 시 파이썬이 응답을 멈춰서 강제 종료됨) 혹시 제가 발견하지 못 한 코드 상의 문제가 있는 것인지、 제 컴퓨터 사양 때문인지 궁금합니다。
-
해결됨Do it! 알고리즘 코딩테스트 with JAVA
교재 227p 백준 1016번 질문드립니다.
저자 선생님 안녕하세요좋은 교재와 강의 잘 보고 있습니다.강의가 없는 1016번 문제에 대해 오래동안 고민을 해도 해결이 안되어 질문을 드리고 싶은데, 받아주시면 정말 감사하겠습니다.시간초과가 난 전체 코드입니다.import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { InputStreamReader is = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(is); StringTokenizer st = new StringTokenizer(br.readLine()," "); long min = Long.parseLong(st.nextToken()); long max = Long.parseLong(st.nextToken()); // 최댓값과 최솟값의 차이만큼 배열 선언하기 boolean[] Check = new boolean[(int)(max-min+1)]; // 2의 제곱수인 4부터 Max보다 작거나 같은 값까지 반복하기 /* 저자님 코드(정답) for(long i=2; i*i<=max; i++){ long pow = i*i; //제곱수 long start_index = min/pow;//최솟값/제곱수 if(min%pow!=0){ start_index++; } for(long j = start_index; pow*j <=max; j++){//제곱수를 true로 변경하기 Check[(int)((j*pow)-min)] = true; } } */ //제 코드(시간초과) for(long i=2; i*i<=max; i++){ long pow = i*i;//제곱수 for(long j=1; (j*pow)<=max; j++){ long t= j*pow;//제곱수의 배수 if((min<=t) && (t<=max)){//제곱수의 배수가 min과 max 범위 안이면 Check[(int)(t-min)] = true; //제곱수의 배수 표시 } } } // long count = 0; for(long i = 0; i<=max-min; i++){ if(!Check[(int)i]){ count++; } } System.out.println(count); } } 위의 전체 코드에서 저자 선생님 코드를 주석 /* */ 로 감싸고제 코드를 바로 아래에 작성했는데, 보시기 힘들 것 같아서 보라색과 초록색으로 구분한 스크린샷을 같이 올려드립니다.제 코드의 경우, 백준 문제에서 보여준 테스트케이스는 통과하는데시간초과가 발생했습니다.그래서 많은 테스트케이스를 시도해봤는데입력1000000000000 1000001000000이 테스트케이스에서저자 선생님 코드는 제대로 작동을 하고, 제 코드는 시간초과가 발생하는 것 같았습니다.하루종일 고민해도 그 이유가 도저히 이해가 안돼서, 질문을 드리고 싶습니다.가르쳐주시면 정말 감사하겠습니다.읽어주셔서 감사합니다. +오후 8시에 질문을 추가드립니다.시간초과가 안나는 핵심 로직이 long start_index = min/pow;//최솟값/제곱수 if(min%pow!=0){ start_index++; }같은데 이 부분이 이해가 너무 어렵습니다..이 코드를 더 자세하게 가르쳐주시면 감사하겠습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-B char배열과 int배열 질문입니다.
http://boj.kr/c486a4712da546db8d98b08c3e5084f4제 코드중에 a배열을 int로 하였더니 예제출력이 9가나와서 오답입니다.동일한코드에서 int a배열을 char배열로 바꿧더니 정답이 8이됩니다.int만 char로 바꾸었는데 정답이 바뀔수 있나요?제가 알기로는 int a[]하고 a에 'W'를 집어넣거나 a[ny]=='W' 동일하다고 알고있는데 제가 잘못알고잇던것같습니다.char a 배열로 선언후 cin>>a[i][j]를 하면 따닥따닥입력도 한글자씩 입력되는지int a 배열로 했을때 왜 맞왜틀인지 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 p154 rotate질문입니다
1, 2, 3, 4, 5, 6을시계방향 : 6, 1, 2, 3, 4, 5반시계방향 : 2, 3, 4, 5, 6, 1이 된다고 설명하셨는데여기까지는 이해가 됩니다.그런데 아래 예제코드에 보면 begin, end 의 결과가 2, 3, 4, 5, 6, 1이 되어있습니다.그러면 begin, end가 반시계방향이라는 말인데p156에 보면 반시계방향은 rbegin, rend을 사용해서 그 결과가 6, 1, 2, 3, 4, 5가 된다고 했습니다.그리고 위에서 반시계방향은 2, 3, 4, 5, 6, 1이라고 했는데 어디서 뭐가 잘못되었는지 혼란스럽습니다...
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
공부방향에 대한 질문이 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 현재 제 수준이 백준기준 실버 3~2 정도라고 생각합니다.그래서 강사님 풀이들 중 골드5에서 어려운 문제들부터는 어떤 알고리즘을 써야겠구나 정도는 인식을 하지만막상 구현을 하지 못해서 강사님의 문제풀이를 보고 이해하고 풀이를 기반으로 하여 그 문제를 다시 푸는 방법으로 공부를 하고 있습니다.(사실상 이해를 기반으로 암기하여 다시 풀어보는 듯 합니다.)모든 공부가 그렇듯 본인이 실력이 늘고 있는지 여부를 알기가 쉽지 않아 혹시 지금 제 공부방식대로 해도 괜찮을지 조언을 듣고 싶습니다.혹시 괜찮은 방법이 있다면 알고 싶습니다.!감사합니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
[3주차 개념 #1 강의] 승철이의 문단속 질문
안녕하세요 큰돌님,재귀를 아직도 정복 못 해서 복습 중에 있습니다. 리뉴얼 된 개념강의라서 냅따 돌려보고 있구요. 보다가 질문이 있어서 글을 작성합니다.문제 : 승철이의 문단속승철이는 도쿄 위의 빨간 구름위에 올라가있다. 이 구름은 그대로 내버려두면 땅으로 떨어져 100만명의 사상자가 발생한다. 구름을 멈추는 방법은 구름의 특정 위치에 요석을 꽂으면 된다. 해당 위치에는 숫자가 표기가 되어있고 몇 개를 골라 숫자의 합이 “소수"가 될 때 구름은 멈춘다. 총 몇 개의 경우의 수가 있는지 말하라.N개의 요석 후보의 숫자와 다음 줄에 해당 숫자들이 나온다. N <= 100강의에서도 13:29 에서 이해가 잘 되지 않습니다. 지금은, 소수인 숫자들에 대해서 누적되어 총합이 만들어지기 때문에 특정 숫자만 살아남는다고 이해했습니다.그런데 예시의 output에서 왜 176이라고 답이 나오나요?질문이 좀 길어졌는데, 정리하면 이렇습니다.(질문에 대한 답변 외에도 추가적인 코멘트 주실 부분이 있다면 감사히 받겠습니다.)Q1. 176의 의미가 정확히 무엇인가요? 176가지인가요?Q2. return check(sum); 의 결과는 1 또는 0인데 cout << go(0,0) << "\n"이 176이 되는 작동 원리가 뭔가요? return된 값을 들고 있는 go()가 다른 go()에 반환할 때 누적되어서 go(0,0)까지 쌓이는건가요?Q3. go()함수에서 return go(idx+1, sum + v[idx]) + go(idx+1, sum)과 같이 idx위치의 숫자를 더한 것과 더하지 않은 go()함수끼리 더하는 논리적 근거는 무엇인가요? 즉, 왜 더해야 했는지. 왜 return이라는 키워드를 사용해야 했는지 궁금합니다.Q4. 강의 영상을 보고나서 특정 숫자에 대해 포함한 경우, 포함하지 않는 경우를 활용하여 해결해야 한다고 표면적인 이해만 완료한 상태입니다. 하지만, 문제 해결을 위한 설계 부분에서 이해가 부족한 것 같습니다. 문제 해결을 위한 설계 부분에 대해서 좀 더 깊은 설명을 부탁드려도 될까요? 재귀함수 진짜 때려 잡고 싶습니다..
-
해결됨코딩테스트 [ ALL IN ONE ]
대기업 합격 수준
안녕하세요, 전 노씨님의 모든 커리큘럼을 구매해서 공부하고 있습니다. 특히 기술면접!!에 많은 도움을 받고 그때부턴 선생님을 믿고 다 지르고/지를예정인데요.다른건 준비를 하고 있거나, 어느정도 해야 통과하겠구나 감이 있는 상태라서 괜찮은데네카라기준 [포트폴리오]는 어느정도로 준비를 해야하는지 감이 잘 오지 않습니다.혹시 선생님께서는 포트폴리오를 어떻게 준비하셨는지, 기술이나 포폴 갯수가 중요하지 않다는 것까진 알고 있지만 그럼 어느 정도의 수준(?)까지 생각해서 구현해야하는지 알고 싶습니다. + 면접 수준ps. 어디에 질문을 해야할지 몰라서 최근 수강하고 있는 강의에 글 남기게 되었습니다. 코테도 열심히 준비해 보겠습니다. 감사합니다.