묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3- k 시간복잡도
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요! 정해를 보며 복습중인데 while 문을 통틀어 NxM 맵을 탐색하니 시간복잡도는 O(NxM)이 맞나요?while(true){ if(move_swan()) break; water_melting(); waterQ = water_tempQ; swanQ = swan_tempQ; Qclear(water_tempQ); Qclear(swan_tempQ); day++; }
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
5-4. 카카오 신입 개발자 블라인드 채용 1차 코딩테스트 - 2 질문입니다.
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 5-4. 카카오 신입 개발자 블라인드 채용 1차 코딩테스트 - 2어떤 알고리즘을 학습하고 계신가요?여기까지 이해하신 내용은 무엇인가요? 2. 어려움을 겪는 부분어느 부분에서 막히셨나요? W = "))()(" 케이스에 대해서, u와 v로 나누어야 하는데 u는 더이상 나눌 수 없는 균형잡힌 괄호 문자열이어야 된다고 했습니다, 하지만 해설로 제공해주신 풀이로 풀 때에는 W = "))()(" 가 애초에 균형잡힌 괄호 문자열이 아니기 때문에 u도 균형잡힌 괄호 문자열이 되지 않는다고 이해했습니다. (W의 문자열 길이가 홀수인 경우에는 )와 (가 모두 짝수 개수만큼 있을 수 없다고 생각했습니다.) 해당 문제의 원 링크에서 제공해주신 코드를 제출했을 땐 정답이 나오는데, 문제 설명 중에서 어떤 조건을 보고 W가 균형잡힌 문자열이 아닐 수도 있다는 것을 알수 있으며, u가 무조건 균형잡힌 문자열이 아니어도 된다는 것을 알 수 있는건가요?코드의 어떤 로직이 이해가 안 되시나요?어떤 개념이 헷갈리시나요? 3. 시도해보신 내용문제 해결을 위해 어떤 시도를 해보셨나요? 제가 짠 코드와 제공해주신 해설 코드 중 차이점이 W를 u와 v로 나누는 부분에 있음을 알게되었고, 제 코드는 W가 무조건 균형잡힌 괄호 문자열인 경우에 대해서만 풀리게 되어있습니다. 에러가 발생했다면 어떤 에러인가요?from collections import deque def is_this_correct_parentheses(string): N = len(string) left_parentheses_num = 0 for s in string: if s == "(": left_parentheses_num += 1 if left_parentheses_num == N-left_parentheses_num: return 1 else: return 0 def is_this_balanced_parentheses(string): stack = [] stack.append(string[0]) string = string[1:] for s in string: tmp = s if len(stack) != 0 and stack[-1] == "(" and tmp == ")": stack.pop() else: stack.append(tmp) if len(stack) == 0: return 1 else: return 0 def u_string_processing(u): u = u[1:-1] tmp_u = "" for i in range(len(u)): if u[i] == "(": tmp_u += ")" else: tmp_u += "(" return tmp_u def get_correct_parentheses(balanced_parentheses_string): W = balanced_parentheses_string if W == "": return "" idx = 0 for i in range(1, len(W)): tmp_u = W[:i] if is_this_correct_parentheses(tmp_u) == 1: idx = i break if len(W) == 2: idx = 2 u = W[:idx] v = W[idx:] if is_this_balanced_parentheses(u) == 1: processed_v = get_correct_parentheses(v) return u+processed_v elif is_this_balanced_parentheses(u) == 0: tmp_string = "(" processed_v = get_correct_parentheses(v) tmp_string += (processed_v + ")") tmp_string += u_string_processing(u) return tmp_string return W 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
-
미해결김영한의 실전 자바 - 중급 2편
hashCode() 오타? 질문
강의 자료 보면, 전부 다 해시코드 만들 때, Object.hashCode()를 사용한다고 되어있는데, 막상 equals()와 hashCode() 오버라이딩된 것을 보면, Objects인데, 둘은 서로 다른 것 아닌가요? 오타 아닌가요?
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
equals() 사용 시 시간 복잡도 관련 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강사님 좋은 강의 항상 감사드립니다.해당 문제에서 시간 복잡도 관련 질문이 있습니다!map의 equals() 는 내부적으로 O(n)의 복잡도를 가진 메소드로 알고 있습니다! 내부 구현 코드도 entrySet을 통해서 반복문으로 찾는 과정이 있는 것 같은데요!그렇다면 for문 안에 equals()를 사용할 경우 O(n^2)이 되는 것이 아닌지 질문 드리고 싶습니다! equals가 평균적으로 n 까지 가지 않기 때문에 제외 되는 것일까요?추가적으로 equals() 를 사용하지 않고 풀이를 해봤습니다! 채점을 했을 땐 통과를 하였는데.. 혹시 이 방법에 예외가 있을까요? import java.util.HashMap; import java.util.Scanner; public class Main { private static void solution(String s, String t) { int idx1 = 0; int answer = 0; int cnt = 0; HashMap<Character, Integer> targetMap = new HashMap<>(); for (char c : t.toCharArray()) { targetMap.put(c, targetMap.getOrDefault(c, 0) + 1); } for (int i = 0; i < s.length(); i++) { char key = s.charAt(i); if (targetMap.containsKey(key)) { int value = targetMap.get(key); if (value == 0) { cnt--; } targetMap.put(key, --value); if (value == 0) { cnt++; } } if (i >= t.length()) { char backKey = s.charAt(idx1++); if (targetMap.containsKey(backKey)) { int value = targetMap.get(backKey); if (value == 0) { cnt--; } targetMap.put(backKey, ++value); if (value == 0) { cnt++; } } } if (cnt == targetMap.size()) { answer++; } } System.out.println(answer); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.next(); String t = sc.next(); solution(s, t); } }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-K 어떤 반례가 있는지 모르겠습니다
http://boj.kr/33d85a5593ae445392cb5242ad169a89
-
미해결김영한의 실전 자바 - 중급 2편
자료구조, 알고리즘
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]자료구조, 알고리즘이 재밌어야 할까요? 개발자가 되려면요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-V 누적합 질문
안녕하세요!!누적합 공부하면서 좀 헷갈리는 부분과 예시코드랑 다른 부분이 있어서 이 두개에 대해서 질문하려고합니다.http://boj.kr/88f78b9449fb462e99bbed15e9875b5f이게 제가 작성한 코드인데요,피자가원형이고, 예를 들어 7,2,2,2,1 이 있다고 치면 확장해서 7,2,2,2,1,7,2,2,2,1 이렇게 만드는 과정이 2*m 즉 2배 확장하는걸로 이해했는데요, (2*m)-1 만 확장해도 상관은 없는거죠? 선택할 수 잇는 시작점의 마지막 위치가 1이고 그 뒤로 넘어가 7을 선택하게되면 결국 맨 처음 선택했던 시작점과 동일해지기 때문에 이런것같은데, Chatgpt를 통해서 의견을 묻는데 반드시 2*M 의 구간확장이 필요하다해서 의미가 있나 싶어 질문드립니다.또한 map에다가 누적합들을 더하는 과정이 예시 코드에서는interval개를 선택할거고, start지점을 interval과 같게 설정하는 부분이 잘 이해가 안됩니다. 저는 i~j까지의 합을 size만큼 펼쳐가면서 더햇는데요, 예시 코드에서 start를 꼭 interval로하는 이유가 있나요? 물론 코드가 정상적으로 동작해서 같은 결과를 내는건 알겠는데, start = 1; start<= n 으로 하지 않는 이유가 궁금합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-H 질문드립니다.
안녕하세요, 큰돌님이 강의에서 설명해주신 코드에서 한가지 사소한 질문이 생겨 글 남기게 됐습니다.같은 글자가 연속으로 나오면 안되는 조건을 위해서 큰돌님께서 prev를 -1로 초기화 하기 i가 0일 때 제외하고 prev와 현재 idx를 비교해서 같으면 flag = 1 이 되도록 하셨는데요.처음에 코드를 봤을 때 prev를 s[0]이 아니라 일부러 -1로 두신 이유를 저는 i >= 1 조건을 생략하기 위해서 혹시라도 i가 0 일때의 idx와 prev가 같은 경우가 생기지 않도록 해서 i = 0일 때 조건을 확인해도 어차피 prev == idx가 거짓이 되도록 한걸로 이해했거든요.(저도 비슷하게 prev를 'a'-1로 초기화하고 for문에서 i=0을 skip하지 않고 다 확인하도록 했습니다. http://boj.kr/8e848001c5b443cd85c5a78d65af69c7)하지만 강의에서 말씀하신 건 첫번째 i=0일때 비교를 피하기 위해서 i>=1을 넣었다고 하셔서 prev를 s의 첫번째 원소가 아닌 -1을 초기화 하는 부분과 i = 0 일 때 prev와 idx를 비교하는 걸 넘어가는 부분이 상충되는 부분이 있어 질문드렸습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-T를 풀면서 생긴 궁금증 질문입니다!!
안녕하세요, 5-T를 풀면서 call by reference에 대한 궁금증이 생겨서 질문드립니다.http://boj.kr/eb2dea066fa343d7b20333031804dfe9해당 문제를 이렇게 제출하여 정답처리 받았는데요,for(auto &k : sharkV){ pair<int,int> newP = k.move(); visited[newP.first][newP.second]++; }이때 k는 구조체 Shark구요, for 범위기반 loop에서 &k 로 받아서 k.move()에서 해당 구조체의 좌표를 변경시키는데요, 여기서 auto&k 대신 auto k를 사용했다면, sharkV의 주소를 참조받아 전달한게 아닌, 복사한 새로운 k라는게 생겨서(깊은 복사?), 이를 변경해도 원본에는 영향이 없는건가요?그리고 Call by value던 reference던, 인자로 넘겨진 변수 이외의 변수가 변경되는 동작이 실행된다면 ( ex) 범위기반 for loop에서 ret을 더하는 행위 ) 이는 참조로 받거나, 값으로 넘긴게 아닌 해당 변수가 직접 들어온것이니 변경된다고 보면 될까요?
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
강의 진행하면서 이해도 및 진행방향에 대한 질문입니다.
1. 현재 학습 진도1-6 시간복잡도 2. 어려움을 겪는 부분강의 유익하게 보고 있습니다! 이제 초반이긴한데 앞으로 진행방향을 어떻게 해야할지 의문이 생겨서요. 강의랑 중간중간 이해가 안 가는 부분들은 AI를 통해 한 줄 한 줄 이해를 하면서 진행을 하고 있는데 여기서 갑자기 드는 의문점 중에 하나가 코드에 대해 이해는 갔습니다. 하지만 저보고 적어보라고 하면 글쎄...? 하는 수준입니다. 그렇다고 하더라도 강의를 계속 이어나가봐도 되는 것일까요? 아니면 그 강의에 대한 내용을 제가 암기로라도 적을 수 있게 되어야 넘어가야 하는 게 맞을까요? 제가 어떤 자세로 선생님의 강의를 임해햐 할지 질문드립니다. 3. 시도해보신 내용문제 해결을 위해 어떤 시도를 해보셨나요?에러가 발생했다면 어떤 에러인가요?현재 작성하신 코드를 공유해주세요 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
진짜 엄청나네요. 이 가격에 새로운 컨텐츠 추가라니
계속 반복 공부 하고 있는데 새로운 컨텐츠 추가라니, 이 가격에 이정도 퀄리티라니 놀라움의 연속입니다. 항상 좋은 자료 만들어 주셔서 감사합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2309 일곱난장이 문제
http://boj.kr/fb2575ddf20441c4bde4df5e41af3735 어디가 틀렸는지 모르겠습니다 ㅠㅠ
-
미해결김영한의 실전 자바 - 중급 2편
해시알고리즘 질문
데이터량보다 배열 크기가 크면 충돌이 잘 안 일어난다고 그랬는데, 에초에 일의자리가 같은 숫자를 넣는 경우가 많으면 배열의 크기가 데이터량보다 커진다 한들, 충돌이 자주 일어나는거 아닌가요? 몇 십만, 몇 백만, 천만건의 데이터가 들어올텐데, 그 중에서 일의자리가 같은 경우가 엄청 많을텐데, 충돌이 엄청 많이 일어나지 않나요??
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
테스트 파일 exit_coe_1, time_limit_exceeded 질문
환경은 윈 11입니다.2번 문제의 경우이런 식으로 exit_code_1이 뜹니다.소스코드는int main() { int n, m, sum = 0; cin>>n>>m; for (int i = n; i <= m; i++) { sum += i; if (i == n) { cout<<i; } else { cout<<" + "<<i; } } cout<<" = "<<sum; return 0; }이렇게 짰습니다.직접 입력하는 테스트 시에는 동일한 문자로 보입니다.3번 문제의 경우이런식으로 time_limit이 걸립니다.소스코드는int main() { int n = 0; int sum = 1; cin>>n; cout<<1; for (int i = 2; i <= n / 2; i++) { if (n%i == 0) { sum += i; cout<<" + "<<i; } } cout<<" = "<<sum; return 0; }이런 식으로 짰습니다.두 문제 간단한 문제라 모두 오류가 나거나 시간 문제가 일어날 이유는 없다고 생각합니다.혹시 비슷한 상황 겪으신 분 계시거나 강사님이 해결 방법 아실까요? 1번 문제에선 테스트 통과 잘된 것으로 보아 string쪽에서 문제가 있을 것으로 예상됩니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의 학습 방법 문의
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 선생님 안녕하세요 코테를 처음 시작하는 걱정이 아주 많은 학생입니다. 혼자서 시작하는 건 너무나 오랜 시간이 걸릴 것 같고 당장 앞에 놓인 과제가 너무 무겁고 두려워 이렇게 선생님의 강의를 듣기로 결심했습니다.10주차라는 선생님의 강의만 쫓아가면 코테 합격 가능할까요? 아니면 별도로 시간을 들여 따로 공부를 또 해야할까요? 직장을 다니며 많은 시간을 투자하기에 어려움이 있어 질문 드립니다.저는 JAVA 개발자입니다. C++로 문제를 푸는게 이직을 하는데 문제가 되지 않을까요? 감독관이 C++로 푸는 걸 마이너스 요소로 생각할까 걱정이 되어 질문 드립니다.선생님이 주신 교안 및 문제 해설 등의 자료는 어떻게 활용하는 것이 좋을까요? 아직 0주차 시작하는 단계입니다.긴 질문 읽어주셔서 감사합니다.열심히 해보겠습니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
k가 0일 경우에
안녕하세요 선생님. 수업 정말 잘 듣고 있습니다. 이번 문제 조건에 첫번째 줄에 수열의 길이에대한 조건만 있고 k에대한 조건이 없어서 문제의 예시로 나온 수열에서 k에 0을 넣고 코드를 실행 시켜봤는데 정답 코드에서 잘못된 답을 주고 있어서 문의 드립니다. 혹시 k에대한 조건이 1 이상인가요? 아래 입력대로라면 정답은 2가 나와야할 것 같아서 문의 드립니다. 0 0 0 0 1 1 0 1 1 0 1 1 0 1 입력14 00 0 0 0 1 1 0 1 1 0 1 1 0 1 public int solution(int[] input, int length, int k) { int lt = 0; int max = Integer.MIN_VALUE; int cnt = 0; for (int rt = 0; rt < length; rt++) { if (input[rt] == 0) cnt ++; while (cnt > k) { if (input[k] == 0) cnt--; lt ++; } max = Math.max(max, rt - lt + 1); } return max; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-C memset 배열 초기화 질문-C memset 배열 초기화 질문
안녕하시렵니까제가 문제를 한번 풀어봤는데 memset으로 배열을 초기화 했을 때 초기화가 잘 안되는 것을 확인 했습니다아래 코드에서는 carcnt[2]부분 입니다혹시 제가 함수 사용에 있어 실수 한 부분이 있는지 왜 이런 일이 일어나는 것인지 궁금합니다아래 코드는 = {0, }를 사용해 통과한 코드이고 주석 부분 풀고 = {0, }부분 지워 주시면 문제의 코드가 나옵니다강의 재밌게 잘 보고 있습니다 감사합니다 ^^7http://boj.kr/5f431b3ae8254d5d9a978ec62d3ca827
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-O 관련해서 질문 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 선생님 이번 강의에서 LIS를 사용하라는 말씀을 듣고 문제를 다음과 같이 풀 수 있었습니다.http://boj.kr/cf757148c19742598fb6d6d56ebb1190정답은 되었지만 이 문제를 보고 생각했던 방향을 스케줄링이랑 그라디쪽을 계속 생각하며 어떻게 풀지 막막했습니다.근데 LIS라는 말씀을 듣고 바로 풀 수 있었습니다. 아직 LIS 문제인지 파악하는게 쉽지가 않아서 혹시 LIS 문제 더 추천해주시면 감사하겠습니다.
-
미해결자바 코딩테스트 - it 대기업 유제
cpu 스케줄링
package chapter3.sol5_cpu_스케줄링; import java.util.*; public class Solution { public int[] solution(int[][] tasks) { int[] answer = new int[tasks.length]; Queue<int[]> q = new PriorityQueue<>(Comparator.comparingInt((int[] a) -> a[1]).thenComparingInt(a -> a[0])); int[] ch = new int[tasks.length]; for (int s = 0, i = 0; ; s++) { for (int j = 0; j < tasks.length; j++) { if (tasks[j][0] <= s && ch[j] == 0) { q.offer(new int[] {j, tasks[j][1]}); ch[j] = 1; } } if (!q.isEmpty()) { int[] poll = q.poll(); answer[i++] = poll[0]; s += poll[1] - 1; } if (i == tasks.length) break; } return answer; } public static void main(String[] args) { Solution T = new Solution(); System.out.println(Arrays.toString(T.solution(new int[][] {{2, 3}, {1, 2}, {8, 2}, {3, 1}, {10, 2}}))); System.out.println(Arrays.toString(T.solution(new int[][] {{5, 2}, {7, 3}, {1, 3}, {1, 5}, {2, 2}, {1, 1}}))); System.out.println( Arrays.toString(T.solution(new int[][] {{1, 2}, {2, 3}, {1, 3}, {3, 3}, {8, 2}, {1, 5}, {2, 2}, {1, 1}}))); System.out.println(Arrays.toString(T.solution(new int[][] {{999, 1000}, {996, 1000}, {998, 1000}, {999, 7}}))); } } 안녕하세요 정답 코드가 아닌 이 코드도 가능한지 궁금합니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-P 코드 질문있습니다.
안녕하십니까 큰돌님 !강의 보기 전에 먼저 풀어봤습니다.http://boj.kr/07da2671b1834ef48a660cf8b6b03b08전에 벽을 세우는 문제처럼 풀면 되겠다 싶어서꽃 중심부 심을 수 있는 부분을 v 벡터에 넣고퍼뜨리고 겹치는 부분 없으면 더 해서 최솟값 비교반복하면서 visited 와 flag 초기화이런 식으로 작성했습니다. 접근 방법과 코드를 잘 작성했는지 궁금합니다.근데 백트래킹을 사용하는 것보다는 비효율적이겠죠 ??