묻고 답해요
150만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
순위 정보를
불러오고 있어요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-H ret 초기값 질문 있습니다.
선생님 코드에서 ret의 초기값을 -1000000 으로 주셨는데 이유가 궁금합니다.만약 n이 100000, k가 99999, 모든 temp가 -100일 때 0~99999까지 더하면 -1000000보다 작은 값이 나오게 되어 최대 값을 제대로 못찾을거같은데 어떻게 코드가 통과한 것인지 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-H 하나의 문자를 입력 받을 때 런타임 에러
안녕하세요, 큰돌님.http://boj.kr/f7198ad0aa0740abb6a3d6f9cb33c43e2-H 에서 입력 받은 s가 "a" 같은 하나의 문자일 때 런타임 에러가 떴습니다. 계속 수정하다 보니 모음 or 자음 3개 연속 조건 부분의 코드 문제인 것 같았습니다. for(int i = 0; i < s.size() - 2; i ++)그래서 s가 하나의 문자일 때를 나눠서 계산하였습니다. // s가 문자일 때 if(s.size() == 1) 이렇게 하니 맞긴 했는데 코드가 너무 난잡해진 것 같습니다...기존 방식의 런타임 에러의 이유제 코드보다 더 좋은 해결 방안이 있을까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2Q 질문 있습니다!
안녕하세요 큰돌님!2Q 를 풀다가 반례를 못찾겠어서 질문드립니다!https://www.acmicpc.net/source/90805248제가 제출한 코드인데, 큰돌님의 풀이보다 복잡하고 비효율적인 것은 알지만 이 풀이가 왜 틀렸는지 알고싶어서 여쭤봅니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
스택만을 이용한 풀이
선생님의 풀이를 보고 이건 진짜 못떠올릴 것 같은데? 라는 생각이 들었습니다.배열에 마킹을 하면서 푸는 풀이는 떠올릴 수 있을 것 같은데, 스택만 이용한 풀이에서 -1을 넣어서 풀이하는 방식은 정말 감탄이 나오네요. 저도 스택만을 이용하는 비슷한 풀이를 떠올려서 '((()))'가 6이 나오게 하는 방법은 고안을 했는데 '((()))()'가 8이 되게 하는걸 처리하기가 너무 어렵더라구요. 하지만 -1을 넣어두면 전부 처리가 되네요.그리고 올바르지 않는 문자열이 오면 그 인덱스를 넣어주면 -1을 넣은 것과 동일하게 뒤의 문자열도 판별할 수 있다니...이 풀이를 보고 이런 아이디어는 정말 못 떠올릴 것 같다는 생각이 들었습니다. 이런 아이디어를 잘 떠올리기 위해서 어떻게 연습하면 좋을까요?
-
미해결2주만에 통과하는 알고리즘 코딩테스트 (2024년)
#1090번 문제 반례가 궁금합니다.
from copy import deepcopy def init_sort_checker(checkers): tmp_list = [] sorted_sum_list = [] for idx, chk in enumerate(checkers): for i, tgt in enumerate(checkers): if idx == i: #본인으로 가는 값은 제외 continue x_val = abs(chk[0] - tgt[0]) y_val = abs(chk[1] - tgt[1]) # price, [src, tgt] 순 정렬 tmp_list.append([x_val + y_val, [idx, i]]) tmp_list.sort(key=lambda x: x[0]) # price 값 적은 순서대로 정렬 sorted_sum_list.append(deepcopy(tmp_list)) tmp_list = [] return sorted_sum_list def sort_sum_target(sorted_sum_list, k): lowest_price = 1000000*k target_idx = -1 for idx, line in enumerate(sorted_sum_list): cnt = 0 line_price = 0 for price in line: if cnt >= k-1: break line_price = line_price + price[0] cnt += 1 if line_price < lowest_price: lowest_price = line_price target_idx = idx return target_idx def k_tgt_process(k, sorted_tgt, sorted_sum_list): tgt_line = sorted_sum_list[sorted_tgt] tgt_loc = [] for i in range(k-1): tgt_loc.append(tgt_line[i][1]) return tgt_loc def k_sorting_process(tgt_loc, checkers): tgt_list = [] for tgt in tgt_loc: tgt_list.append(tgt[0]) tgt_list.append(tgt[1]) tgt_list = list(set(tgt_list)) x_list = [] y_list = [] tgt_checkers = [] for tgt in tgt_list: x_list.append(checkers[tgt][0]) y_list.append(checkers[tgt][1]) tgt_checkers.append(checkers[tgt]) x_list.sort() y_list.sort() if len(x_list)%2 == 0: #짝수 x_chk_point = [int(len(x_list)/2-1),int(len(x_list)/2)] else: # 홀수 x_chk_point = [int(len(x_list)/2)] if len(y_list)%2 == 0: #짝수 y_chk_point = [int(len(y_list)/2-1),int(len(y_list)/2)] else: # 홀수 y_chk_point = [int(len(y_list)/2)] #모아볼 위치의 case 집합 chk_point_list = [] for x_chk in x_chk_point: for y_chk in y_chk_point: chk_point_list.append([x_chk,y_chk]) # 각 checker 위치에서 좌표로 이동하는데 드는 값 계산 ttl_price_list = [] for chk in chk_point_list: x_tgt = chk[0] y_tgt = chk[1] price_list = [] for checker in tgt_checkers: x = checker[0] y = checker[1] if x_list[x_tgt] > x: x_price = x_list[x_tgt] - x else: x_price = x - x_list[x_tgt] if y_list[y_tgt] > y: y_price = y_list[y_tgt] - y else: y_price = y - y_list[y_tgt] price = x_price + y_price price_list.append(price) price_list.sort() ttl_price_list.append(price_list) return ttl_price_list def TestCases(N): checkers = [list(map(int,input().split())) for _ in range(N)] sorted_sum_list = init_sort_checker(checkers) output_str = '0' for k in range(2, N+1): min_price = 2000000 sorted_tgt = sort_sum_target(sorted_sum_list, k) tgt_loc = k_tgt_process(k, sorted_tgt, sorted_sum_list) ttl_price_list = k_sorting_process(tgt_loc, checkers) for n_list in ttl_price_list: tmp = 0 for idx in range(k): tmp = tmp + n_list[idx] if tmp < min_price: min_price = tmp output_str = output_str + ' ' + str(min_price) tmp_str = list(map(int,output_str.split())) # print(output_str) print(*tmp_str) N = int(input()) TestCases(N) 다음과 같이 코드 작성해봤는데, sample input에 대한 답은 다 도출되지만문제 제출하면 답이 틀리다 나오네요..반례나 코드상의 오류를 도와주실 수 있을까요? [사용해본 input/output]4 1 1 2 1 4 1 13 1 0 1 3 14 4 13 13 16 14 15 18 15 30 0 4 8 24 5 3 2 6 9 3 16 14 6 17 14 0 10 17 31 47 5 3 2 6 9 6 13 13 6 17 14 0 4 14 24 40 4 15 14 15 16 14 15 16 15 0 2 3 4 2 4 7 4 7 0 0 4 1 101 2 101 200 101 201 101 0 1 199 398
-
미해결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군데 합격 비법, 2024 코딩테스트 필수 알고리즘
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군데 합격 비법, 2024 코딩테스트 필수 알고리즘
강의 진행하면서 이해도 및 진행방향에 대한 질문입니다.
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주차 시작하는 단계입니다.긴 질문 읽어주셔서 감사합니다.열심히 해보겠습니다.
주간 인기글
순위 정보를
불러오고 있어요