묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
7576번 풀이 코드 관련 질문
안녕하세요 선생님. 7576번 토마토 문제를 풀기 위해 코드를 짜서 제출했는데 자꾸 틀렸다고 처리가 되어서 어디가 문제인지 궁금하여 질문드리려 합니다. time matrix 대신에 visit matrix를 쓰는거 말고는 예시답안과 거의 일치하는것 같은데 어디가 문제일까요?import sys from collections import deque def bfs(cands): global data, N, M, min_dist, dx, dy visit = [[False] * M for _ in range(N)] q = deque() for (i,j) in cands: q.append([i,j,0]) visit[i][j] = True while q: x,y,dep = q.popleft() min_dist[x][y] = min(min_dist[x][y], dep) for di, dj in zip(dx,dy): ni = x + di nj = y + dj if (0<= ni < N) and (0<=nj<M) and (not visit[ni][nj]) and (data[ni][nj] == 0): q.append([ni,nj,dep+1]) visit[ni][nj] = True dx = [0,1,0,-1] dy = [1,0,-1,0] M, N = map(int, input().split()) data = [] for _ in range(N): data.append(list(map(int, input().split()))) min_dist = [[1e6]*M for _ in range(N)] cands = [] for i in range(N): for j in range(M): if data[i][j] == 1: cands.append((i,j)) if data[i][j] == -1: min_dist[i][j] = -1 bfs(cands) val = max(max(min_dist)) if val == 1e6: print(-1) else: print(val)
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4 - J 맞왜틀 질문있습니다.
처음에는 감조차 못잡다가, 가로세로 힌트를 듣고 어떻게 구현을 하긴 했습니다.그런데 Test Case는 전부 맞는데 제출을 했을때 0퍼에서 틀려버립니다.이유를 모르겠습니다...http://boj.kr/edf18c4b49134e13b67c75f324ea9dc9감사합니다.
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
헤드노드에 관해..
계속 그리면서 이해하다가 딜레마에 빠져 질문드립니다 ..새 노드 추가할때의 그림을 그려보며 이해중이였는데,else{pNewNode->pNext = g_pHeadNode;g_pHeadNode = pNewNode;}이 코드는 이미 헤드노드가 가리키는 '원래노드'가 따로 있는건데그렇다면 pNewNode의 pNext엔 헤드노드 주소값을 넣으면pNewNode는 AddNewNode에서 초기화된 각자의 멤버값을 가지면서 pNext를 따라가면 헤드노드가 나오게 되고, 그 헤드노드의 pNext를 따라가면 '원래노드'가 나오게 되는데그 상태로 g_pHeadNode = pNewNode; 를 수행하게 되면 헤드노드에 pNewNode값이 오버라이트되게 되는건데 그럼 이 상황에선기존헤드노드에 뉴노드멤버들의 값들과 pNext엔 헤드노드의 주소값, 이걸 따라가면 뉴노드멤버들의 값들과 pNext엔 헤드노드가 가리켰던 '원래노드'의 주소값, 이걸 따라가면 '원래노드'멤버들의 값과 pNext값 . . . 이렇게 생각하면 되는건가요 ?그럼 결국엔 이 상황에선 g_pHeadNode와 pNewNode는 pNext를 제외한 모든 멤버변수들이 같은값을 가지고 있는 상황인거라고 해석하면 되는건가요 ? ( 뭔가 3개의 노드가 다 다른 멤버변수값을 가져야할것만 같은데, 2개의 노드가 같은 멤버변수값을 가지는거같아 이상하여 이해한게 맞나, 아니면 개념을 잘못잡은건가 싶어 질문드립니다 )질문이 길어져 죄송합니다 . . .
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-F 질문있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 비트마스킹의 허우적 거리고 있습니다. 예시를 들고 계신 부분(영상 3:19초)에서 abc 를 비트마스킹한 값을 배열에 저장해뒀다가 완전 탐색하면서 비트마스킹(7) == 경우의 수?(7)이 같으면 이것은 가능한 경우의 수라는 뜻인가요?? 1주차 2주차 3주차는 시간이 지나도 다르게 풀기도하고 하는데 이 비트마스킹은 벽을 느끼고 있습니다. 어찌해야 될가 답답하네요 ㅠㅠ
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드리뷰 부탁드립니다.
Map과 for문으로 풀이를 했는데, 코드리뷰 부탁드립니다. function solution(arr) { let sumSet = new Map(); for (let i = 0; i < arr.length; i++) { let sum = 0; for (let j = 0; j < String(arr[i]).length; j++) { sum += Number(String(arr[i])[j]); } sumSet.set(arr[i], sum); } let maxVal = 0; let maxKey = 0; for (const [key, value] of sumSet) { if (value > maxVal) { maxKey = key; maxVal = value; } else if (value === maxVal) { if (key > maxKey) { maxKey = key; maxVal = value; } } } return maxVal; } console.log(solution([128, 460, 603, 40, 521, 137, 123]));
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4 - B 질문있습니다.
다행히 강의를 듣고 문제를 풀긴 했습니다.하지만 하나의 의문이 풀리지 않아 질문을 올려봅니다. 이 문제의 요점은 다음과 같다고 저는 생각합니다.1. 결론적으로 우리가 보고싶은것은 BF를 통해 모든 행과 열을 순회하면서 뒤집을 때의 결과를 체크하고 최소값을 구하는 것이다. 하지만 이것은 2^40이기에 시간범위를 넘어선다.2. 그러므로 2^40을 피하기 위해 모든 행들을 순회하면서 뒤집은 한 다음, 모든 열을 뒤집는 대신 T가 많은 열만 뒤집음으로서, 2^20 * 2^20 대신, 2^20 + @로 줄일 수 있다.그런데 이렇게 할거면 행 역시 완전탐색인 2^20을 피하기 위해 T가 많은 행만 뒤집을 수 있지 않을까 라는 생각이 계속해서 드네요. T가 많은 행 만을 뒤집었을때 답이 틀리게 나오는걸 보면 분명 무슨 이유가 있을건데, 반례가 떠오르지 않고 찝찝해서, 행과 열 둘다 T가 많은 것만 뒤집었을때 답이 틀리는 원인이 궁금해 질문을 올려봅니다.>>간단하게 생각하시면 됩니다.-> THT 라는 상황을 가정해볼게요.이 열 1, 2, 3 열에 대해 뒤집는 모든 경우의 수가 끝났습니다.이제 경우의 수는 이 행 -> 을 뒤집느냐. 아니면 안뒤집느냐. 라는 경우의 수밖에 없죠? 이 때 어떤 경우의 수가 최적의 수일까요?뒷면이 위를 향하는 동전 개수를 최소로 만드는 것이 가장 최적의 수 아닐까요?커뮤니티를 봤을 때 비슷한 질문에서 이런 답을 보았는데 이걸 읽어도 이해가 안되네요ㅠㅠ. 감사합니다.
-
해결됨[파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
재귀함수 질문
재귀함수에서 보통 베이스 케이스에 리턴이 있는 경우를 많이 봤는데 베이스 케이스 부분에 return 안쓰는거랑 return 쓰고 그 뒤에 비워놓는거랑 같은 건가요??예를 들어 이 두개가 같은건가요? (함수 안 부분 띄어쓰기해도 질문등록하면 다 왼쪽으로 정렬되서 보이네요ㅠ)함수1: def function()for _ in range(N):... 함수 2: def function()return for _ in range(N):...
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-K 질문있습니다.
http://boj.kr/7606eba320de41679c31fffb9ff36d31이 코드는 맞은 코드이고http://boj.kr/44198150718f45fbaa3c3bee07710833이 코드는 틀린 코드입니다. 두 코드에서 다른 부분이라고는 58번줄 if문에서 "n - m == 1" 이라는 조건이 들어가냐 마냐의 차이인데 저러한 조건이 없어도 모든 노드가 연결되기 위해서는 당연히 n - m == 1 조건이 만족되지 않나요?만족하지 않는다면 애초에 모든 노드가 연결 안되지 않나요?
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
강의자료에서
for x in range (1, k+1): # 가방 무게가 x일 때 # 물건을 담을 수 있을 때 (x보다 무게가 작거나 같을 때) if x < weight : dp[y][x] = dp[y-1][x] # 물건을 담을 수 없을 때 ( 전에 넣어뒀던 무게로 유지) else: dp[y][x] = max(dp[y-1][x],dp[y-1][x-weight] + value )이렇게 나와있는데, x < weight이면 물건을 못담을때 아닌가요??
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4 - A 질문 있습니다.
비트 마스킹, 정답이 없을 시 -1 처리, 같은 값을 가진 결과들끼리의 정렬, 최대 최소 범위 지정, 까지 했는데 8%에서 막혀 질문을 올려봅니다... http://boj.kr/879fef56c4584e6a85f2670b5166dd11 감사합니다.
-
미해결김영한의 실전 자바 - 중급 2편
인텔리제이 SDK 오류
인텔리제이에서 java-mid2 폴더를 열면 파일들이 안보이는데 SDK 오류 같습니다. 어떤 버전의 SDK 써야 오류 안나나요? 지금은 Eclipse Termurin 21.0.4 -aarch64 설정되어 있네요
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
TreeSet활용
TreeSet이 중복되지 않는 것을 사용해서 풀어봤는데 설명해주신 내용과 어떤 차이가 있는지 궁금합니다. 코드입니다. public static String solution(int a, int[] arr){ String answer = "D"; TreeSet<Integer> set = new TreeSet<>(); for(int x : arr){ set.add(x); } if (set.size() == a){ answer = "U"; } return answer; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-c 코드 질문이 있습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요! 큰돌님 다름이 아니라 해당문제를 잘 못 풀겠어서 큰돌님 풀이를 봤는데요저는 맨처음에 문제를 풀때 좌표를 벗어나는지와 구멍인지를 for문 안에서 체크했는데요for(int i = 0; i < 4; i++){ // 해당 좌표만큼 이동한다 int ny = y + dy[i] * value; int nx = x + dx[i] * value; if(!in(y, x) || b[y][x] == 'H') continue; ret= max(ret, down(ny, nx) + 1); }이렇게 제출하니까 틀렸다고 떴습니다. 왜 for문 안에 넣으면 안되는 걸까요?아래는 제출한 전체 코드입니다.#include <bits/stdc++.h> using namespace std; int t,a,d[54][54]; string s; char b[54][54]; bool check[54][54]; const int dy[4] = {-1, 0, 1, 0}; const int dx[4] = {0, 1, 0, -1}; // 좌표 내에 포함하는 지 체크한다 bool in(int aa,int bb){ return(1<=aa && aa<=t && 1<=bb && bb<=a); } int down(int y,int x){ // 이미 갔던 곳이라면 순회를 하는 코드이니까 -1을 출력하고 main함수 종료 if(check[y][x]){ cout << -1 << "\n"; exit(0); } //현재 좌표로 이동한 횟수 -> 이미 해당 위치에 숫자가 있다면 int &ret = d[y][x]; if(ret) return ret; check[y][x] = 1; int value = (int)b[y][x] - '0'; for(int i = 0; i < 4; i++){ // 해당 좌표만큼 이동한다 int ny = y + dy[i] * value; int nx = x + dx[i] * value; // 좌표를 벗어나거나 구멍이면 return 0 -> 갈 수 없음 if(!in(y, x) || b[y][x] == 'H') continue; ret= max(ret, down(ny, nx) + 1); } // 원복을 해준다 check[y][x] = 0; return ret; } int main(){ cin >> t >> a; for(int i = 1; i <= t; i++){ cin >> s; for(int j = 1; j <= a; j++){ b[i][j] = s[j - 1]; } } cout << down(1, 1) << "\n"; }
-
미해결자바 코딩테스트 - it 대기업 유제
송아지를 잡자
홀수 레벨만 본다고 했을 때 이전 홀수 레벨에서 방문한 노드를 이후 홀수 레벨에서는 왜 그냥 넘어가는 건가요?? 말씀하신 것처럼 송아지가 움직이니까 이전 홀수 레벨에서 만나지 않았더라도 이후 홀수 레벨에서 만날 수 있는 거 아닌가요??
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
문제를 풀 때 변수들을 전역변수로 선언하는 이유가 있나요??
객체지향 공부를 하다 보니 전역변수를 사용하는 것이 실제 사용과 상관 없더라도 잘 안 하게 됩니다. 수업에 보면 대부분의 변수들을 전역변수로 사용하시는데 알고리즘 공부할 때는 웬만하면 전역변수로 선언하는 것이 좋은 건가요? 변수 선언할 때 팁이 있는지 궁금합니다.
-
해결됨[파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
백준 1260 (DFS 와 BFS) 프린트 위치 질문
안녕하세요 🙂 bfs 에서 질문이 있는데 왜 프린트(print(idx, end = ' ')를 for loop 안에서 queue.append(i) 한 다음 프린트하지 않고 큐에서 팝할때 프린트 하나요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-H 시간복잡도 질문 있습니다!
벽하나를 허물고 DFS를 반복해 풀이처음에는 이 풀이 방법이 떠올랐는데요벽의 개수가 어림잡아 250개고 벽을 허물고 모든 노드를 dfs를 250번을 돌아야하니 좀 비효율적인 느낌도 들고 시간 복잡도가 너무 커 안될 것 같다. 라고 느낌은 드는데요...점화식으로 초과한다!가 계산이 안되어서 고민입니다..그래야 빨리 포기하고 다른 로직을 생각할텐데 아마 시험볼때는 시간에 쫓기다보니 다른 생각을 못할 것 같아서요.. 어떻게 사고하는게 좋을까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
학습 진도 관련해서 질문드립니다!
안녕하세요 기존에 파이썬으로 코딩테스트 공부 하다가, 큰돌님 유튜브 영상 보고 강의까지 입문하게 된 취준생입니다. 공부 계획을 짜던 중, 강의 순서가 주차 단위로만 나뉘어져 있고 일일 단위로는 안 나누어져 있어서 일일 계획을 짜기를 힘들어하고 있습니다.n주차 강의는 해당 주차에 끝내고 싶은데, 주차별로 일일 학습량에 대한 계산을 따로 해 두신게 있는지 궁금합니다.없다면 어떤 식으로 하루 공부량을 잡아야 할지도 조언 부탁드립니다!
-
미해결김영한의 실전 자바 - 중급 2편
배열도 리스트라고 할 수 있나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]<직접 구현하는 배열 리스트1 -시작 2:15초>리스트의 정의를 보았을 때, 순서가 있고 중복을 허용하는 자료구조를 리스트라고 한다. 배열: 순서가 있고 중복을 허용하지만 크기가 정적으로 고정됨. 리스트: 순서가 있고 중복을 허용하지만, 크기가 정적으로 변할 수 있음. 배열은 리스트에 포함이 되는 것 같기도, 안 되는 것 같기도 합니다..!정의를 보면 배열은 리스트에 포함되는 것 같고,리스트와 대조해보면 리스트가 아닌 것 같아요..! 배열도 리스트 자료구조인가요..?
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
2133번 문제풀이 관련 질문
안녕하세요 선생님. 이전 두 질문에 대한 답변이 많은 도움이 되었습니다. 감사합니다.2133번 문제의 DP 1번 풀이에서 O(N^2) 풀이를 소개해주셨는데 아래와 같이 dp 테이블을 갱신할 때 sum_dp 테이블을 같이 갱신을 해주면 시간복잡도가 O(N)으로 줄일 수 있지 않나 싶어 질문드립니다.N = int(input()) if N % 2 != 0: print(0) else: n = N//2 dp = [1] * (n+1) sum_dp = [1] * (n+1) for i in range(1,n+1): dp[i] = sum_dp[i-1] * 2 + dp[i-1] sum_dp[i] = sum_dp[i-1] + dp[i] print(dp[-1]) 그리고 이건 다른 종류의 질문인데 혹시 그래프 부분이 실제로 코테에 많이 등장하나요? 제가 조금 급하게 준비하고 있는 상태라 이론을 필수 알고리즘2까지만 들어도 될지 아니면 그래프까지 다 들어야될지 고민중입니다. 조언 주시면 감사하겠습니다!