묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1주차 개념# 5-1.문제로 엽습하는 시간복잡도 Q3에서
2분 41초에go(3,3) go(4,4)가 어떻게 나오는지 알수있을까요??go(3,4)에서 min = (3+4)/2 = 3.5이렇게 3.5가 나오는데 ... mid가 int값이면 반올림해야되는건가요? 아니면 소수 점은 버리는건가요?? 이해가 잘 안갑니다 ㅠㅠ
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
병합정렬 시간복잡도 질문
왜 nLogN 인지 이해가 안되는데 조금만 더 쉽게 설명 좀 부탁드립니다.그리고 중간 설명에서 log2의 n은 무엇을 말하는건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
두수의 합 질문입니다.
안녕하세요 강사님.a[l] + a[r] == x 인 경우에r-- 가 아니라 i++ 로 해도 상관없나요?
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
sum == total // 2 질문 , 파이썬의 형변환 , 타입 질문
저의 풀이입니다 . 강의에서sum == total // 2이 코드에서 예외가 발생할 수 있다고 하셨는데 몫을 구하지말고바로 나누기로 해서 풀면 되지않을까요? 그리고 궁금한점이파이썬에서는 타입이 달라도 ( 16 정수타입 과 16.0 실수타입 )같다고 인식되나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 문제 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 올려주신 해설과 다른 점을 딱히 못찾겠는데 제 코드는 10% 전에 틀렸습니다가 나오게 됩니다.반례를 알려주세요 ㅠㅠ#include <bits/stdc++.h> using namespace std; vector<string> split(string input, string delimiter) { vector<string> ret; long long pos = 0; string token = ""; while (pos = input.find(delimiter) != string::npos) { token = input.substr(0, pos); ret.push_back(token); input.erase(0, pos + delimiter.length()); } ret.push_back(input); return ret; } int main() { int cnt = 0; cin >> cnt; string pattern_str; cin >> pattern_str; vector<string> pattern = split(pattern_str, "*"); string s; for (int i = 0; i < cnt; i++) { cin >> s; if(pattern[0].size() + pattern[1].size() > s.size()) cout << "NE" << "\n"; else { bool check = (pattern[0] == s.substr(0, pattern[0].size())) && (pattern[1] == s.substr(s.size() - pattern[1].size())); if (check) { cout << "DA" << "\n"; } else { cout << "NE" << "\n"; } } } return 0; }
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
문제 끝까지 안읽고 K번째 큰수.. 말장난에 당해버렸습니다..
K번째 큰 수가 그거였군요..처음에 키워드가 딱 조합,순열 문제길래초반인데 뭐지 했습니다.근데 입력제한이 N이 100이하더군요그래서 바로 삼중포문 돌려서 풀었는데 ,case#1만 success 뜨고 나머진 다 wrong answer 떠서뭘 잘못했나? 하고, 결국 조합까지 구현해서 풀었는데도 오류 뜨길래 1시간넘게 고민하다가 문제 다시 보고 해결했습니다...문제 마지막줄 22 안읽고 그냥 풀다가..., 추가로이제껏 문제들 다 자바스크립트로 푸는게 익숙해서 파이썬으로 알고리즘 문제 푸는게 안 익숙하네요..특히 자바스크립트에서 항상 쓰던, 전개연산자랑 특히, 고차함수랑 구조분해..(map,filter,sort,reduce,forEach, flatmap 같은 것들 많이 썻는데)파이썬에서의 위와 같은 기능으로서 존재하는것들을 사용해서, 구현하고자 싶어하는걸 구현하는게 진짜 적응이 안됩니다 그런데 파이썬도 자바스크립트처럼, 혹시 순열,조합, 트라이 구조나 힙 등.. 구현하기 귀찮은것들.. 구조 이용해서 풀려면 다 구현해놓고 써야하나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-S 효율적인 해킹 문제 (중간에 값이 변합니다 ㅠㅠ)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요! 2-S 효율적인 해킹 문제를 풀던 중 도저히 알수없는 문제를 만나 질문글을 올립니다.다름아니라 최대값과 해킹할 수 있는 컴퓨터의 값이 중간에 변하는 문제를 만났습니다.보시는 바와 같이 DFS 결과값을 넣어주는 반복문 안에서 출력을 하면 출력값이 제대로 나오는데보시는 바와 같이 DFS 결과값을 넣어주는 반복문 밖에서 출력을 하면 DFS 결과값들을 넣어준 배열값들이 변하면서 원하는 출력값이 나오지 않습니다.. 어딜 실수한건지, 어딜 잘못적은건지 도저히 모르겠습니다....ㅠㅠ 도와주세요...ㅠㅠㅠㅠ
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
윈도우11은 작동오류나는거 해결했습니다
기존에 쓰던거 지우고, 파이썬 3.11 Latest 받고돌렸을때 계속 그대로여서,컴터 한대 때리니, 블루스크린 떳습니다. 그리고 다시 컴터 키고 비주얼 코드 키고 다시 실행하고 복사해서 옮긴뒤 채점기 실행하니 Success 잘 뜨네요.. 휴,..흠
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-A 도대체 뭐가 틀린건지 모르겠어요
http://boj.kr/d2eacfaff77446728671edea35b1d7e9코드 작성한 후 강사님 코드를 보면서 수정하였는데 도대체 뭐가 틀린 건지 모르겠습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
그래프 문제 해결 방식 관련
안녕하세요, 강사님좋은 강의 덕분에 코테 준비를 잘 해가고 있습니다. 다름이 아니라, 그래프 유형 문제를 풀 때, 즉 bfs나 dfs 관련 문제를 백준 사이트에서 찾아 풀 때, void bfs(int y, int x).... 이렇게 풀고 있는데, 오래 걸려도 풀지 못 할 때, 다른 사람의 답안을 볼 떄는 void bfs(int x, int y)로 잡아서 풀더라구요. 다른 사람의 답안을 강사님이 풀어주시는 방식으로 바꿔 풀 때는, 그냥 x->y, y->x로만 바꿔서 풀면 될지, 매개변수 들을 다 바꿔야 될지 굉장히 헷갈려서 질문 드립니다 ㅠㅠ
-
미해결코딩테스트 실전 모의고사(with C++) : 대기업 대비
조합을 구할때 algorithm 함수 next_permutation 사용 가능 여부
제목 그대로 조합을 구할때 next_permutation 을 사용 해도 되는지 궁금합니다
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
문법질문입니다.
import java.nio.channels.Pipe; import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; class Point implements Comparable<Point>{ public int x, y; Point(int x, int y){ this.x = x; this.y = y; } @Override public int compareTo(Point o){ if(this.x == o.x) return this.y-o.y; else return this.x-o.x; } } class Main{ public static void main(String[] args){ Scanner kb = new Scanner(System.in); int n = kb.nextInt(); ArrayList<Point> arr = new ArrayList<>(); for(int i = 0; i < n; i++){ int x= kb.nextInt(); int y= kb.nextInt(); System.out.println(x+","+y); arr.add(new Point(x, y)); } Collections.sort(arr); System.out.println(">>"); for (Point o: arr) System.out.println(o.x+" "+o.y); } } arr.add(new Point(x, y));이 부분을 출력해서 값을 프린트하고 싶은데 어떻게 코드를 짜야하나요??public static void main(String[] args){ Scanner kb = new Scanner(System.in); int n = kb.nextInt(); ArrayList<Point> arr = new ArrayList<>(); for(int i = 0; i < n; i++){ int res; int x= kb.nextInt(); int y= kb.nextInt(); System.out.println(x+","+y); arr.add(new Point(x, y)); res = arr.add(new Point(x, y)); System.out.println(res); }이렇게 res 변수를 만들어서 작석했는데 에러가 나네요 ㅠ 도와주세요ㅠㅠㅠ
-
미해결코딩테스트 실전 모의고사(with C++) : 대기업 대비
최악의 경우 연산 질문이 있습니다.
강의를 수강하고 있는 학생입니다. 다만 최악의 경우를 따지는 데에서 조합의 수 x n(학생의수) 의 최악의 경우15C7 x 30000인데 이경우 6435x30000=193,050,000가 도출됩니다.이러면 계산이 2억번 가까이 되어서 1000ms에 풀수 있는지 여쭤 볼 수 있을 까요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
바둑이 승차관련 sum>c return으로 조건을 돌면 최대값을 찾기 전에 프로그램이 종료되는건 아닌가요??
<script> function solution(c, arr){ let answer=Number.MIN_SAFE_INTEGER; let n=arr.length; function DFS(L, sum){ if(sum>c) return; if(L===n){ answer=Math.max(answer, sum); } else{ DFS(L+1, sum+arr[L]); DFS(L+1, sum); } } DFS(0, 0); return answer; } let arr=[81, 58, 42, 33, 61]; console.log(solution(259, arr)); </script> 아직 재귀에 대한 이해가 짧아 잘 모르겠습니다.답은 242인데,만약 sum의 값이 181이었고 다음에 나온 sum의 값이275라고 한다면sum>259일때 return으로 함수가 종료되고최대값인 242를 찾지 못하고 181로 종료가 될수도 있는것 아닌가요??아니면 제가 이해를 잘못한건지요??
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
15. 토마토(BFS : Breadth First Search) 질문
첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다.라고 해서 m, n 을 입력 받았는데 왜 틀린지 모르겠습니다.강사님 풀이에서 n, m이라고 받으신 이유도 모르겠습니다....아래 코드에서 제대로 array 받아오는 것 같은데 이유를 틀리는 이유를 모르겠습니다...!강사님이 제공해주신 테스트 케이스는 다 통과하지만 백준에서는 틀리는 이유를 모르겠습니다... 6 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 # 받아온 array [0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 1] 8import sys sys.setrecursionlimit(10 ** 6) # sys.stdin=open("in5.txt", "r") def valid_coord(x, y): if 0 <= x < m and 0 <= y < n: return True else: return False def print_array(array): for elem in array: print(elem) def bfs(): while queue: # tmp_len = len(queue) # for _ in range(tmp_len): temp = queue.popleft() temp_dis = dis[temp[0]][temp[1]] for dx, dy in zip(dxs, dys): nx = temp[0] + dx ny = temp[1] + dy # 익지 않은 상태이거나 유효한 좌표일 때 if valid_coord(nx, ny) and arr[nx][ny] == 0: queue.append((nx, ny)) arr[nx][ny] = 1 dis[nx][ny] = temp_dis + 1 if __name__ == '__main__': from collections import deque n, m = map(int, input().split()) arr = [] for _ in range(m): arr.append(list(map(int, input().split()))) dis = [] for _ in range(m): dis.append([0] * n) dxs = (-1, 1, 0, 0) dys = (0, 0, -1, 1) # print_array(arr) # print('----') # print_array(dis) queue = deque() for i in range(m): for j in range(n): if arr[i][j] == 1: queue.append((i, j)) bfs() # print_array(dis) # arr에서 0을 발견하면 flag = False로 설정 flag = True for i in range(m): for j in range(n): if arr[i][j] == 0: flag = False result = 0 if not flag: print(-1) else: result = max(max(dis)) print(result)
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
문제 2-2
안녕하세요 선생님 열심히 알고리즘 강의 수강하고 있는 학생입니다.다름이 아니라 질문드릴게 있어서 글 쓰게 되었습니다.섹션 2의 2번째 문제에서 for i in range(T): n,s,e,k = map(int,input().split()) a=list(map(int,input().split())) a=a[s-1:e] a.sort() print("#%d %d" %((i+1),a[k-1]))코드를 이렇게 짰습니다. 이렇게 짜면 맞지만, 저 코드중 굵게 표시한 곳을 붙여서 a=a[s-1:e].sort() 라고 붙여쓰면 오류가 납니다.구글링을 해봐도 알 수 없기에 질문 드렸습니다.감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
map 질문드립니다.
vector<int> v{1,1,2,2,3,3};에서 map을 이용해서 중복제거하셨던데for(int i : v){ if(mp[i]){ continue; }else{ mp[i] =1; }} i에 순서대로 1,1,2,2,3,3이 들어가는거까진 알겠는데이 for문을 돌면 map에는 1,2,3이 어떻게 들어가는건지 이해가 잘 안가네요 ㅠㅠ첫번째 mp[1]이 들어가면 else로 들어가서 mp[1] = 1이 들어가고 다음 i=1이 들어가면 if(mp[1])에서 1이 있으므로 true이고 continue로 들어가는건 알겠습니다.i=2가 들어가면 이때부터if(mp[2])에서 여기부터 이해가 잘 안갑니다. 어떻게 mp[2]에 2가 들어가는지요..
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
04-03 매출액의 종류 System.out.printf
04-03 매출액의 종류 문제를 풀던 중,System.out.print() 로 출력하면 정답 처리가 되던 부분이System.out.printf()로 출력 할 경우 time exceed 처리가 됩니다. System.out.printf()의 문제인지 궁금합니다.. 아래는 타임아웃된 소스코드인데,강의자료에서 출력문만 변경 한 것입니다. ======================================================== import java.util.*;class Main { public ArrayList<Integer> solution(int n, int k, int[] arr){ ArrayList<Integer> answer = new ArrayList<>(); HashMap<Integer, Integer> HM = new HashMap<>(); for(int i=0; i<k-1; i++){ HM.put(arr[i], HM.getOrDefault(arr[i], 0)+1); } int lt=0; for(int rt=k-1; rt<n; rt++){ HM.put(arr[rt], HM.getOrDefault(arr[rt], 0)+1); answer.add(HM.size()); HM.put(arr[lt], HM.get(arr[lt])-1); if(HM.get(arr[lt])==0) HM.remove(arr[lt]); lt++; } return answer; } public static void main(String[] args){ Main T = new Main(); Scanner kb = new Scanner(System.in); int n=kb.nextInt(); int k=kb.nextInt(); int[] arr=new int[n]; for(int i=0; i<n; i++){ arr[i]=kb.nextInt(); } for(int x : T.solution(n, k, arr)) System.out.printf("%d", x); }}
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
[응급실] 질문 드립니다.
선생님 안녕하세요응급실 문제를 제가 처음 푼 방식대로 채점을 받아 보았는데,문제에 있는 예시 문제는 제대로 통과가 되었는데요.채점 사이트 내에 있는 예시는 오답이 나와 질문 드립니다. 같은 위험도를 가진 수가 나오는 경우) idx가 작거나 같으면 answer++;하는 방식으로 문제를 구현하였습니다.public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int M = 0; Queue queue = new LinkedList(); for (int i=0; i<n; i++){ int a = sc.nextInt(); queue.offer(a); if(i == m){ M = a; } } System.out.println(solution(n,m,M,queue)); } private static int solution(int n, int m, int M, Queue queue) { int answer =0; for (int i=0; i < n; i++){ int que = (int)queue.poll(); if(que > M){ answer++; } else if(que == M && i <= m){ answer++; } } return answer; } }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-S
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <algorithm> #include <map> #include <set> #include <vector> #include <queue> #include <cstring> int N, M; int cache[10001] = {-1,}; int traverse(std::map<int, std::vector<int>>& treeMap, int node) { if (treeMap.find(node) == treeMap.end()) { cache[node] = 1; return 1; } if (cache[node] != -1) { return cache[node]; } int sum = 0; std::vector<int> v = treeMap[node]; for (int i = 0; i < v.size(); ++i) { int tmp = traverse(treeMap, v[i]); sum += tmp; } cache[node] = sum + 1; return sum + 1; } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); std::cin >> N >> M; memset(cache, -1, sizeof(cache)); std::map<int, std::vector<int>> treeMap; for (int i = 0; i < M; ++i) { int from, to; std::cin >> to >> from; if (treeMap.find(from) == treeMap.end()) { std::vector<int> v; v.reserve(N); v.push_back(to); treeMap[from] = v; continue; } treeMap[from].push_back(to); } std::map<int, std::vector<int>> countMap; int maxCount = 0; for (auto iter : treeMap) { const int startNode = iter.first; memset(cache, -1, sizeof(cache)); int nodeCount = traverse(treeMap, startNode); maxCount = std::max(maxCount, nodeCount); if (countMap.find(nodeCount) == countMap.end()) { std::vector<int> v; v.push_back(startNode); countMap[nodeCount] = v; continue; } countMap[nodeCount].push_back(startNode); } for (int i = 0; i < countMap[maxCount].size(); ++i) { std::cout << countMap[maxCount][i] << " "; } std::cout << std::endl; return 0; }답이 틀렸다고 나오는데 어디서 왜 틀렸는지 잘 모르겠습니다. 혹시 이 부분을 설명해주실 수 있으실까요?