묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-C 질문있습니다
http://boj.kr/bd886da1402c420f8b5d6e75d1cdf360 혹시 반례 부탁드려도 될까요?반례를 구한다면 어떤 방식으로 반례 값을 설정할지도 궁금합니다
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 불! 코드 질문있습니다
http://boj.kr/ad93c77cfed245858c644f3adb037853큰돌님 작성한 코드의 42번 if 문은 있어도 없어도 둘 다 통과하는데if 문이 없어도 되는 이유가 J 값이 처음부터 가장자리면 바로 출력하면 되는 거고 가장자리가 아니더라도53번의 if문을 통해서 fvisited 값보다 무조건 작은 jvisited 값이 가장자리까지 가는 로직이라서 그런 거죠 ??
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-G 질문있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하십니까 선생님, 어느 부분에서 틀렸는지 도움 부탁드립니다.http://boj.kr/9f99ed1c47a842b9af37e728a08dccee
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
알고리즘
이것좀 풀어주세요 ㅜ
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
안녕하세요, 혹시 다른문제도 여쭤볼 수 있을까요?
import java.util.*; public class Main { static int N; static ArrayList<Integer>[] graph; static ArrayList<Integer>[] graphReverse; static ArrayList<Integer> orderNode = new ArrayList<>(); static ArrayList<Integer> reverseOrderNode = new ArrayList<>(); static boolean[] visited; public static void dfs(int idx) { visited[idx] = true; orderNode.add(idx); for(int next : graph[idx]) { if(!visited[next]) { dfs(next); } } } public static void dfsReverse(int idx) { visited[idx] = true; reverseOrderNode.add(idx); for(int next : graphReverse[idx]) { if(!visited[next]) { dfsReverse(next); } } } public static void main (String[] args) { Scanner input = new Scanner(System.in); boolean isReverseOrder = true; boolean isOrder = true; N = input.nextInt(); graph = new ArrayList[N+1]; graphReverse = new ArrayList[N+1]; visited = new boolean[N+1]; for(int i = 1; i <= N; i++) { graph[i] = new ArrayList<>(); graphReverse[i] = new ArrayList<>(); } for(int i = 0; i < N-1; i++) { int x = input.nextInt(); int y = input.nextInt(); graph[x].add(y); graph[y].add(x); graphReverse[x].add(y); graphReverse[y].add(x); } input.nextLine(); String[] orderStr = input.nextLine().split(" "); for(int i = 1; i <= N; i++) { Collections.sort(graphReverse[i], Collections.reverseOrder()); } for(int i = 1; i <= N; i++) { if(!visited[i]) { dfs(i); } } visited = new boolean[N+1]; for(int i = 1; i <= N; i++) { if(!visited[i]) { dfsReverse(i); } } for(int i = 1; i <= orderStr.length; i++) { // System.out.println(orderStr[i-1]); if(reverseOrderNode.get(i-1) != Integer.parseInt(orderStr[i-1])) { isReverseOrder = false; } if(orderNode.get(i-1) != Integer.parseInt(orderStr[i-1])) { isOrder = false; } } if(isOrder || isReverseOrder) { System.out.println(1); } else { System.out.println(0); } } }안녕하세요 강사님,,덕분에 비전공자인 제가 dfs 26개의 문제를 풀고 골드에 진입했습니다.정말 너무나도 감사합니다.하지만 골드에서 막히는게 많은데 이번 문제는 도저히 검색하고,반례를 다 찾아보고 해봐도 해결이 되지않아 답답한 마음에 여기에 글을 적습니다..문제는 백준 https://www.acmicpc.net/problem/16964 DFS 스페셜 저지입니다.제가 푼 방법은 2개의 그래프를 만든 후,1개는 sort, 다른 한개는 reverseOrder을 하여,정점 방문 순서를 2개 구한 후,마지막에 제시되는 4개의 숫자와 비교하여 출력하는 방식으로 코드를 작성하였습니다.하지만 제가 찾아본 모든 반례와 백준에서 제공되는 예제들은 통과되는데,6%에서 틀렸다고 나옵니다.다른문제로 곤란하게 해드렸다면, 바로 글 삭제하겠습니다.감사합니다.
-
미해결Do it! 알고리즘 코딩테스트 with C++
LCA 빠르게 찾기 - 트리의 높이에 따른 k값 질문
이번 강의 3회차로 잘 보고 있습니다.앞선 강좌 LCA 빠르게 찾기에서는 트리의 깊이는2^K < (트리의 최대 높이)를 만족하는 K의 최대값이라고 하셨는데실제 코딩 하실때는 아래 코드 처럼 작성하셨는데 최악인 편향 트리일때 과정하고 넉넉하게 K값을 구하는건 이해했습니다.아래 코드에서는 N이 2^K > N 을 만족하는 최소 K값을 구하식으로 구하셨더라구요 이렇게 구해도 답은 나오는데 왜 이런지 몰라서 그런데 보충 설명 가능할까요?// N의 트리가 편향 트리라고 간주 // 최악일 경우 KMax를 구한다. int temp = 1; KMax = 0; while (temp <= N) { temp <<= 1; KMax++; } // 2^k < N // KMax - 1 하는게 맞지 않나?
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
TreeSet을 사용하는 이유
안녕하세요! 저는 HashSet을 사용해서 풀었는데요!public int solution(int n, int k, int[] arr) { int answer = -1; // HashSet으로 변경 Set<Integer> set = new HashSet<>(); // 모든 3개 조합의 합을 HashSet에 추가 for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { for (int l = j + 1; l < n; l++) { set.add(arr[i] + arr[j] + arr[l]); } } } // HashSet을 List로 변환 List<Integer> list = new ArrayList<>(set); // 내림차순 정렬 Collections.sort(list, Collections.reverseOrder()); // K번째 값 반환 if (list.size() >= k) { return list.get(k - 1); } return answer; }커뮤니티 보니 treeSet을 사용하는 이유가 "같은 숫자의 카드가 여러장 있을 수 있습니다."라고 하셨는데, 강의 내에 코드는 3개의 카드를 더한 값에 대한 중복 제거지, 각 카드 숫자에 대한 중복을 제거하는건 아니지 않나요..??hashSet을 사용하는게 O(n3)로 시간복잡도가 더 나은 것 같은데 treeSet을 사용해야 하는 이유를 아직 이해 못했습니다 ㅠㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-0 질문 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 선생님 제가 풀이한건데 문제에 예시 입력을 했을 때 맞게 나오고 다르게 해봤는데 맞게 나왔는데 어떤 부분 때문에 틀렸는지 도저히 몰라 질문 남깁니다. 어떤 반례가 있길래 이럴까요??#include<bits/stdc++.h> using namespace std; string s; int n,cnt,ret =-987654321,start; stack<char>st; int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); cin >> n >> s; for(char c : s){ if(st.size() && st.top() == '(' && c == ')'){ cnt += 2; st.pop(); }else if(st.size() && st.top() == ')' && c == '('){ while (!st.empty()) st.pop(); st.push(c); cnt = 0; }else{ st.push(c); } ret = max(ret, cnt); } cout << cnt << "\n"; return 0; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-N 질문 있습니다!!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 선생님 제 풀이도 맞는거 같은데 뭐 때문에 틀렸는지 모르겠네요 ㅠㅠ#include <bits/stdc++.h> using namespace std; string a,b,ret; int res[10001]; int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); cin >> a >> b; reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); int len = max(a.size(), b.size()); for(int i=0; i< a.size(); i++){ res[i] = a[i] - '0'; } for(int i =0; i < b.size(); i++){ res[i] += b[i] - '0'; if(res[i] >= 10){ res[i] -= 10; res[i+1]++; } } if(res[len] > 0) len++; // 마지막 자리 올림 확인 reverse(res, res + len); for(int i = 0; i < len; i++){ ret += (char)(res[i]+'0'); } if(ret.empty()) cout << 0 << "\n"; cout << ret << "\n"; return 0; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 질문이 있습니다.
제가 처음 작성했던 코드는 다음과 같습니다. 1번 코드 (처음 작성한 코드) http://boj.kr/a88f71f09ca849eab6009b62163b7a562번 코드 (substr 활용한 코드) http://boj.kr/589098635bfd4acb8726f8a5cbc18157선생님 풀이를 보고 substr을 활용해서 작성해 봤을 때, 사이즈 체크 조건문에 대해 질문이 있어서 글 남깁니다. 1번 코드에서는 사이즈 체크하는 조건문과 패턴을 확인하는 조건문을 같은 시점에 비교해도 정답이 나왔습니다. 하지만 2번 코드에서는 사이즈 체크를 먼저하고 -> 그 이후에 사이즈 조건을 만족할 때 패턴을 비교하는 코드를 넣어야만 올바른 답이 도출됩니다.이게 왜 차이가 나는것인지 설명해주시면 감사하겠습니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-R 어느 부분이 잘못됐는지 모르겠습니다 ㅠㅠ
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.http://boj.kr/9fff1d9753f744368a676b0324bf1c6e코드가 너무 복잡한건지 TestCase도 통과를 못합니다.맵을 선생님이랑 다르게 만들었는데 이게 문제인건지...아예 다른 문제점이 존재하는건지 아무리 살펴봐도 모르겠어서 질문남깁니다 ㅠㅠ
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
코딩테스트
문제 1. 현재 N개의 숫자 카드를 가지고 있고, 각 숫자카드마다 정수가 하나씩 적혀있다. 정수 M개가 주어졌을때,이수가적혀있는숫자카드를현재가지고있는지아닌지를구하는프로그램을작성하여라. 입출력 및조건 • 입력의첫째줄에는현재가지고있는숫자카드의개수N이주어진다. (1≤N≤500,000) • 입력의둘째줄에는숫자카드에적혀있는정수들이공백한칸으로구분되어주어진다. (수의범위는 −10,000,000 부터 10,000,000 사이의 중복되지 않는 정수) • 입력의셋째줄에는M이주어진다. (1≤M≤500,000) • 입력의넷째줄에는현재가지고있는숫자카드인지아닌지를구해야할M개의정수가공백한칸으로 구분되어주어진다. (수의범위는−10,000,000 부터 10,000,000 사이의 중복되지 않는 정수) • 출력의첫번째줄에는주어진M개의수에대해서,각수가적힌카드를현재가지고있으면1,아니면 0을 공백한칸으로구분하여출력한다. CODE HERE 부분의 코드를 짜야하는데 도와주세요 import time import utils def solution(test_case): # time check start_time = time.time() ##################### CODE HERE ##################### ##################################################### # end time elapsed_time = time.time() - start_time print("Elapsed time: {:.8f} seconds".format(elapsed_time)) return result ###################### DO NOT TOUCH BELOW ###################### if __name__ == '__main__': import argparse parser = argparse.ArgumentParser(description = 'Argument parser') parser.add_argument('--input', '-i', default = './input', help = 'Input file path') parser.add_argument('--output', '-o', default = './output', help = 'Output file path') args = parser.parse_args() utils.output_checker(args.output) test_cases = utils.read_input(args.input) for test_case in test_cases: result = solution(test_case) utils.write_ouput(args.output, result) utils.compare_files(args.output)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
효율적인 해킹 코드 질문
http://boj.kr/3362a1a378f74be69dfe31314faa485d큰돌님, 코드 작성해보았는데 효율적인 코드인지 궁금합니다 !그리고 큰돌님 코드와 제가 작성한 코드 최악의 시간 복잡도가while 반복문 -> 100,000for 반복문, dfs -> 10,000 * 10,000 = 100,000,000출력 반복문 -> 10,000 => O(100,110,000) 이 되는 거 맞는지도 궁금합니다 !
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
최대수입스케쥴(PriorityQueue) 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.아래와 같이 코드를 작성하였을 때 예제에는 정상정답이 나오고, 저도 반례를 찾지 못하는데, 채점에서는 오답이라고 나옵니다.어느부분이 오답인지, 그리고 반례가 뭐가 있을지 궁금합니다.ㅠㅠ import java.util.*; public class Main { public static class schedule implements Comparable<schedule>{ int pay = 0; int day = 0; schedule(int p,int d) { this.pay = p; this.day = d; } @Override public int compareTo(schedule o) { if(this.day == o.day) return o.pay - this.pay; else return o.day - this.day; } } public void solution(List<schedule> list) { Collections.sort(list); int answer = 0; int day = list.get(0).day; Queue<Integer> queue = new PriorityQueue<>(Collections.reverseOrder()); for(schedule s : list) { if(day == s.day) { queue.offer(s.pay); } else { if(!queue.isEmpty()) { int p = queue.poll(); answer += p; } queue.offer(s.pay); day--; } } System.out.println(answer += queue.poll()); } public static void main(String[] args) { Main T = new Main(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); List<schedule> list = new ArrayList<>(); for(int i=0; i<n; i++) { int pay = kb.nextInt(); int day = kb.nextInt(); list.add(new schedule(pay, day)); } T.solution(list); } }
-
해결됨김영한의 실전 자바 - 중급 2편
new T(); 와 new Node<T>();의 차이
===================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요, 수업을 열심히 따라가며 코드를 작성해보면서 궁금한 점이 생겨 이렇게 질문드립니다. 앞서 제네릭 부분에서 타입이레이져 방식 때문에 제네릭 타입정보는 컴파일 이후 모두 사라지고 타입변수의 상한타입으로 바뀐다고 이해하였습니다. 그래서 위 처럼 new 로 직접 타입변수 T의 인스턴스를 생성하거나 instanceof T 구문을 쓰지 못한다고 하셨습니다.컴파일 이후에는 T에 대한 정보가 없으니까요. 그런데 리스트에서 제네릭을 사용하는 부분을 보면 LinkedList<T>처럼 제네릭 타입을 활용해 클래스를 정의하였고 내부에 new Node<T>(); 와 같은 부분이 있어 위의 언급한 내용과 상충하는 것 같아 이 경우는 왜 가능한지 의문이었습니다. 구글에서 찾기 쉽지않아 직접 T를 생성하는 것(new T(); )과 Node<T>를 생성하는 것(new Node<T>(e);)의 차이를 혼자 고민해보았습니다.T를 생성하는 것은 힙영역에 T 인스턴스를 생성하는 것인데 컴파일 이후 T에 대한 정보가 전혀 없어 T 직접생성이 불가능하지만, Node<T>의 경우 Node의 인스턴스를 생성할 때 T타입인 item이 있지만 이때 T타입의 객체를 생성하는 것이 아니라 언젠가 생성될 T객체의 참조값을 담을 변수만 선언하는 것일 뿐이고 이는 컴파일 이후 T의 정보가 없어 Object 타입으로 변수 item이 선언되더라도 후에 T타입의 객체(의 참조값)가 item에 할당될때 저절로 업캐스팅이 되어 문제없이 item변수를 사용할 수 있다고 결론내렸습니다. 이렇게 생각하면 문제없는걸까요?
-
미해결자바 코딩테스트 - it 대기업 유제
채점 사이트 개설
강의 채점 사이트 안녕하세요 강사님 기존 강의인"자바 알고리즘 문제풀이 입문 :코딩테스트 대비"를 너무 잘 듣고 공부해서 강사님의 다음 강의를 의심없이 샀는데채점 사이트가 없어서 너무 불편합니다...왜 기존에는 있었는데 이번 강의에는 없는걸까요...하나 똑같이 만들어주시면 안되나요?이미 강의자료도 의심없이 받았다가 환불도 안되고..이전 강의엔 채점 사이트가 있어서... 채점 사이트가 없을 줄은 꿈에도 몰랐네요후속강의임에도 불구하고 더 불편해진 것 같아서 문의드립니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
문제 사이트 제출한 결과 검색
문제 사이트 제출한 결과 보는 곳에서 검색 Search Author 칸이 있던데 어떻게 검색하는건가요?제출했던 결과 중 특정 문제를 검색할 수 있는 방법이 없을까요? 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
제 컴퓨터에서는 7초가 걸립니다.
https://www.acmicpc.net/source/86932466 질문 : 제 컴퓨터에서는 실행시간이 7초 걸립니다.처음에 무식하게 풀었습니다.반례를 생각하기 위해 최대 숫자인 1만을 넣었습니다.시간이 오래걸렸습니다.무려 7초.그런데 문제에서 요구하는 시간은 2초. 잘못된 풀이였구나 넘어갔습니다.그런데 도저히 도저히 안되어서 강의를 봤습니다. 제 컴퓨터에서 7초가 걸리는 강사님 코드도 제가 무식하게 푼 코드도 백준 제출을 하니 되더라구요. 허탈한 마음과 충격에 질문을 남깁니다. 컴퓨터를 껐다 키고 바로 실행시켜도 저런데 왜 저런 걸까요?요구시간이 2초이면 c++ 기준 초당 2~3억회 연산을 처리하니 대충 4억 미만 안에 연산이 끝날 것 같으면 자신있게 백준에 제출을 해야할까요?횡성수설 해서 죄송합니다. 좋은 강의 늘 감사합니다. p.s 첫 질문 드림. 블로그도 잘 보고 있습니다. CS 면접강의도 듣고있습니다. 단톡에도 있습니다. 어비스 화이팅!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
인접행렬에서 탐색할때의 경우
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 큰돌님! 강의를 보던중 제가 아는 지식이 이곳에 적용이 되는지 궁금해져서 질문을 남겨놓습니다.2주차 개념 4-1 인접행렬 8:00 경에 x(순회할때 j)를 중심으로 보는것보다 y(순회할때 i)를 중심으로 보는 것이 더 좋고 그 이유가 행별로 캐싱이 된다고 하셨는데요! 이때 y(순회할때 i)를 선택하는 것이 더 좋은 이유가 자세히 생각했을 때 데이터 지역성 때문에 그런것인지 의문을 가지게 되어 질문을 남겨보아요!
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
모든 아나그램 찾기에서 시간복잡도
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강사님 안녕하세요!모든 아나그램 찾기 문제에서 compareMaps에 for문이 있어서 해당 문제 시간복잡도가 O(N*M)이 되지 않나요? 그럼 결국 이중for문의 시간복잡도와 같아지는건 아닌지 궁금합니다~!