묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Do it! 알고리즘 코딩테스트 with JAVA
[그래프의 표현 실전 문제] 이분 그래프 판별하기(백준 1707) 코드 오류
강사님 항상 유익한 수업 잘 듣고 있습니다! 무료로 강의를 열어주셔서 정말 감사드립니다.[그래프의 표현 실전 문제] 이분 그래프 판별하기(백준 1707) 강의에서 38번째 라인 코드를 'DFS(1)'에서 'DFS(i)'로 수정이 필요해 보입니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-C while구문 시간복잡도 질문입니다.
안녕하세요 강사님! 저는http://boj.kr/6c770daceea84800b760a9dd2fccfff9 //제 코드의 rain은 강사님의 d(depth)와 동일합니다.while구문으로 풀어봤는데, 시간초과라고 뜹니다. 제 코드의 시간복잡도는 100 x 100 x 100해서 백만이 맞는건가요?? 추가로 while문 보다는 for문으로 푸는게 시간복잡도를 줄이는데 더 좋은건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-B배열에 관한 fill함수 질문입니다.
http://boj.kr/b25d9f2b896a4636bd396a5a12f73925저는 위 링크처럼 배열크기를 넉넉히 추가하여 a[54][54], visited[54][54]로 선언하였는데, fill함수를 이용할 때, 끝 값을 a[50][51]로 하면 틀렸습니다 라고 나옵니다.여기서 틀렸습니다 라고 나오는 이유가 교안을 찾아보니 fill함수로 초기화 할때는 전체를 초기화 하는게 정신건강에 이롭다고 하지만,,제가 생각하기엔 a배열에 입력되는 정수가 0~49뿐이니 마지막으로 49, 49가 입력되어 저장되는 곳인 a[50][50]의 바로 다음 값까지 초기화해도 된다고 생각하였습니다. 즉, 이 문제는 배열의 일부분만 초기화해도 된다 생각했습니다. 제가 범한 오류는 무엇인가요..?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
0주차 메모리와 포인터#1 질문 있습니다!
강의에서 변수 선언 후 변수에 값을 넣어도 메모리 주소는 변하지 않는다고 말씀하시고 예제를 보여주셨는데 제 pc에서는 왜인지 변수에 값을 할당하기 전과 후의 메모리 주소가 달라서 궁금해서 질문 남깁니다. 실행할때마다 메모리 주소가 바뀌는게 신기해서 여러번 실행해봤습니다. 감사합니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-O 시간복잡도
안녕하세요 큰돌님!해당 문제의 시간 복잡도 관련된 질문이 있어서 여쭤봅니다.3-O 번 문제에 대해서 어떤 로직을 쓸 지 고민하다가,사다리 3개 조작, 사다리 내려가기 << 이렇게 2 가지 로직이 필요 하다고 생각했습니다.그래서 제가 계산한 바는,사다리 3개 조작 : 300 C 3사다리 내려가기 : 30 * 10이 둘의 로직이 동시에 일어나야 한다고 생각해서,300 C 3 * (30 * 10) 라고 결론 냈습니다.http://boj.kr/475effafef89456687b5176ac5dcf21c(정답코드 링크)그런데, 강의를 보니까선생님은 300 C 3 만 언급하셧는데요. 이 부분이 이해가 되지 않습니다. 정답코드의 재귀 함수만 보더라도, 2중 for문 안에서 go()가 호출되는데, 이런 경우는 사다리 내려가기에 대한 시간복잡도가 영향을 받지 않는건가요?// 경우의 수를 두면서 재귀. for(int i = here; i <= h; i++){ for (int j = 1; j <= n; j++) { // 이미 존재하는 경우는 예외 if(line[i][j] || line[i][j-1] || line[i][j+1]) continue; // 경우의 수 추가 line[i][j] = 1; go(i, cnt + 1); line[i][j] = 0; } } 질문이 좀 길어졌네요. 정리하면 이렇습니다.Q1. 제가 계산했던, 사다리 조작 * 사다리 내려가기 에 대한 시간 복잡도 계산은 틀렸나요? 틀렸다면 어디서 로직 오류가 있는건가요?Q1-1. 혹시, 제가 계산했던 시간 복잡도에서,300 C 3 + (30*10) 으로 계산해도 무방한가요?Q2.선생님은 왜 300 C 3 이라고만 계산하셨나요?완탐이든/백트래킹이든 재귀로 탐색(?)해야 하는 건 알겠는데, go() 함수가 호출되는 2중 for문에 대한 시간복잡도는 계산 안하셨는지 모르겠습니다.답변 기다리고 있겠습니다!감사합니다~!!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-H 질문합니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. https://www.acmicpc.net/source/57910682출력은 제대로 나오는거 같은데 틀렸다고 나와서 어디가 잘못됐는지 모르겠습니다. ㅜㅜ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
스택 큐 연결리스트만 나오는 코테 문제는 없나요?
스택이나 큐 연결리스트 맵 해시 이런거는 코테에서 안 물어보나요? 8주 강의에 있는 것 만 달달 공부하면 네이버 코테 통과할 수 있을까요? 물론 강의가 절대 쉬운 건 아니긴 해요 ㅠㅠ
-
해결됨코딩테스트 [ ALL IN ONE ]
커리큘럼 질문 있습니다
과정이 입문 -> 심화이론 -> 심화 문제풀이 순서인데 그래프까지가 입문단계 이고 그 이후 [심화] 라고 올라오는 부분이 심화이론+문제풀이 인가요?
-
해결됨코딩테스트 [ ALL IN ONE ]
Dictionary 내부동작 질문입니다.
Dictionary는 Direct-address Table 처럼보이지만( 키값을 인덱스로 갖는)내부 동작은 Hash table 형식으로 동작한다는 것인가요? 그래서 시간복잡도는 줄여주지만 메모리사용은 증가한다고 생각하면 될까요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
당근마킷 엔지니어 승원이 예제에 대한 질문입니다
안녕하세요 강사님승원이 예제를 풀다가 궁금한 것이 있어 질문드립니다.승원이의 위치(y, x)를 (sy, sx)로 선언하셨고 문제에서 승원이 위치에서 출발한다고 했기 때문에시작위치는 (sy, sx)이고, 그렇기 때문에 queue에 q.push({sy, sx})를 한 것은 이해가 되었습니다.그 다음 q.front()를 통해 큐에 있는 가장 앞에 있는 요소를 참조하는데 큐에 push했던 (sy, sx)가 아닌 (y, x)가 되는지 이해가 되지 않아서 질문드립니다! 어떻게 push하지 않은 (y, x)가 큐 맨앞에 요소로 참조될 수 있는지 궁금합니다! // 아래는 제 질문에 해당하는 코드입니다while ( q.size() ) { tie ( y , x ) = q.front() ; q.pop() ; // ----???
-
해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
txt 파일 input 문제
안녕하세요 1강 문제를 푸는데 계속 아래와 같은 에러가 뜹니다..txt파일과 py파일은 한 폴더 안에 존재합니다. (vscode를 이용 중입니다.)open('./input.txt', 'rt')open('./input', 'rt')open('input.txt', 'rt')open('input', 'rt') 등 다양한 방법으로 open해봐도 문제가 생기는군요..
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
[3-G 질문] 오버플로우 다르게 확인 하는 법..
안녕하세요 큰돌님!덕분에, 코테도 준비하며 강의도 잘 보고 있습니다. http://boj.kr/320a351402cb451d8aff7a538e73189d3-G 문제를 공부하면서 질문이 있습니다.Q1. 오버플로우 확인 할 때, 이렇게 작성하면 어떤 문제가 생기나요? visited[next] == visited[here]+1 과 같이, 소모되는 시간이 같은 경우도, 동일한 cnt[]에 누적해야 한다는 로직은 이해했지만 코드로 옮기기 어려워서 질문드립니다 ㅠ*링크 내의 아래와 같이 적힌 부분이 질문입니다.if(next < 0 || next >= MAX || visited[next]) continue;visited[next] = visited[here] + 1;cnt[next] += cnt[here];...if(visited[next] == visited[here]+1) cnt[next] += cnt[here];
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
해시맵을 사용해서 풀어보았습니다 혹시 예외나 틀린 부분이 있을까요
# 스도쿠 제대로 풀었는지 검사하는 알고리즘 import sys sys.stdin = open("./탐색&시뮬레이션/스도쿠.txt", 'r') n = 9 def solution(sudoku): for i in range(len(sudoku)): rawTable = {} colTable = {} for j in range(n): if sudoku[i][j] in rawTable or sudoku[j][i] in colTable: return False else: rawTable[sudoku[i][j]] = sudoku[i][j] colTable[sudoku[j][i]] = sudoku[j][i] # 이제 3*3 검사도 하자 for i in range(3): for j in range(3): matrixTable = {} for k in range(3): for s in range(3): if sudoku[i*3+k][i*3+s] in matrixTable: return False else: matrixTable[sudoku[i*3+k][i*3+s]] = sudoku[i*3+k][i*3+s] return True sudoku = [list(map(int, input().split())) for _ in range(n)] if solution(sudoku): print('Yes') else: print('No')
-
해결됨코딩테스트 [ ALL IN ONE ]
Daily Temperatures 시간복잡도 질문
input = [73,74,75,71,69,72,76,73] cnt =0 cntarr=[0] * len(input) for x in range(len(input)): for y in range(x+1, len(input)): cnt +=1 if input[y] > input[x]: cntarr[x] = cnt cnt=0 break else: continue else : cnt=0 cntarr[x] = cnt print(cntarr)문제에 대해서 위와같이 풀었을때(1)input = [73,74,75,71,69,72,76,73]cntarr=[0] * len(input) 리스트 넣는 시간복잡도가 O(n)(2)for x in range(len(input)): for y in range(x+1, len(input)):이중반복문 시간복잡도가 (n-1)! 이니까 O(n)(3)if input[y] > input[x]:리스트의 요소 비교의 시간 복잡도가 O(1) 첫 번째 질문으로 이 식의 시간복잡도가 O(n) 인것이 맞는지 궁금합니다.두 번째는for x in range(len(input)): for y in range(x+1, len(input)):위와 같은 이중반복문도 완전탐색이라고 하는 지 궁금합니다.답변주시면 정말 감사하겠습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-E 쿼드트리 질문
string qurad(int y, int x, int size){ if(size == 1) return string(1, a[y][x]); char b = a[y][x]; string ret = ""; bool flag = 0; 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]); }안녕하세요 선생님 항상 좋은 강의를 올려주셔서 감사합니다. 위에 있는 코드에서 변수 flag는 사용되지 않았는데 혹시 flag를 변수를 선언할 때 어떤 의도로 선언했는지 알려주실 수 있나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-K문제 cnt배열크기 재질문입니다.
http://boj.kr/06440aeccbb045b8829d9cdadf5f6a33이 링크는 답지 12행에 있는 if(cnt[i])가 아니라 while(cnt[i)로 바꾸고 이에 맞춰, 18-20행을 바꿔보았습니다.제출하게되면, 시간초과가 나는데 while을 이용한 제 코드의 시간복잡도는 얼마인가요..? http://boj.kr/1cb106485f6b478ab640c60a6dda5cc0전에 제가 cnt배열크기를 26이 아닌 200으로 설정한 이유를 여쭤봤었는데, 답변으로 26으로 설정해도 되며 강사님께서 200으로 설정한 이유는 크게 잡기 위해서라고 하셨습니다.하지만, 링크를 실행하게되면 배열크기를 26, 30으로 잡고했더니 시간초과가 뜹니다.배열크기를 60, 70으로 설정하면 메모리 초과로 뜹니다. 배열크기를 100으로 해야 정답입니다 라고 뜹니다. 이렇게 배열의 크기가 26이 아닌것 같아서 어떤 근거로 배열 크기를 설정 해야하는지 재 질문 드립니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
완전탐색 시간초과
안녕하세요 큰돌님덕분에 알고리즘을 재미있게 공부하고 있습니다!질문사항이 있는데요완전탐색으로 풀이를 해보았는데 시간초과가 났습니다.그래서 방법을 바꿔 visited를 사용하지 않고 풀어보았는데 통과했습니다.시간초과가 발생한 정확한 이유를 모르겠어서 디버깅을 해보았는데 두코드간의 함수호출 횟수가 분명 차이가 있었습니다.하지만 그 원리를 이해하지 못해서 질문드립니다.디버깅을 하면 할수록 머리가 더 복잡해지는것 같습니다...시간초과 코드http://boj.kr/9ca3908dd4624835a28aca2db266321e정답 코드http://boj.kr/18bd16121a7d46ada6f06e4313594796
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
배열 2개로 푸는 것도 괜찮은 방법인가요 ?
import java.util.*; import java.io.*; public class P03_결혼식 { public static void main(String[] args) throws Exception { // 초기 세팅 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int[] starts = new int[73]; int[] ends = new int[73]; for (int i=0; i<N; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); int start = Integer.parseInt(st.nextToken()); int end = Integer.parseInt(st.nextToken()); starts[start]++; ends[end]++; } // 로직 int max = 0; int count = 0; for (int i=0; i<starts.length; i++) { count += starts[i]; count -= ends[i]; max = Math.max(max, count); } // 출력 System.out.println(max); } } 저는 이렇게 풀었는데 따로 정렬하는 Class 안 만들고 이렇게 하는것도 괜찮나여 ? 방대한 데이터가 들어왔을 경우에도 문제없는 코드인지 궁금합니다 !
-
해결됨코딩테스트 [ ALL IN ONE ]
not stact의 위치 질문입니다.
s= "[({" def re(): arr=[] for i in s: if i =="[": arr.append("]") elif i == "{": arr.append("}") elif i == "(": arr.append(")") elif not arr or arr.pop() != i: print(arr) return False if not arr: return True else: return False print(re())s= "[({" 이라고 할때 not arr의 위치 질문입니다. 마지막 elif문에 not arr조건은 가지 못하니까(for문이 이미 끝났기 때문에) 마지막 elif문이 아니라 for문이 끝나고 arr이 비어 있는지 확인해야 하는거아닌가요??s= "[({" def re(): arr=[] for i in s: if i =="[": arr.append("]") elif i == "{": arr.append("}") elif i == "(": arr.append(")") elif arr.pop() != i: return False if not arr: return True else: return False print(re())위에 식처럼 해야하는 거 아닌지 궁금합니다.답변주시면 정말 감사하겠습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
시간 초과가 발생하는 이유를 모르겠습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.http://boj.kr/bcf7e7b1fc404527a3b9fca4f41fd607선생님께서 가르쳐 주신 내용 그대로 했음에도 불구하고 시간 초과가 발생했습니다. 제가 어떤 부분을 놓쳐서 시간 초과가 발생한 것일까요? ㅠㅠ