묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-H질문
bool is_vowel(int idx) { return (idx == 'a' || idx == 'e' || idx == 'i' || idx == 'o' || idx == 'u'); }bool is_vowel(int idx) { if (idx == 'a' || idx == 'e' || idx == 'i' || idx == 'o' || idx == 'u') return true; else false;}이 두 코드가 같다고 생각이 드는데 왜 결과값이 다르게 나올까요??
-
해결됨[파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
graph
dfs 영상을 쭉 보고있는데요 ㅎ문제들 마다 규칙이거의 무조건적으로 visited 와 2차원 graph 가 생성이 되나요 ??visited = []graph = [[False] *MAX for _ in range(MAX)]2. MAX 를 두시는 이유가 뭔가요 ??
-
해결됨[파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
재귀 함수 Depth
영상에서 23:48 부분 보고있는데요.칼럼 2에 5를 제일 하단에다가 적었는 이유가 어떤 규칙이 있는건가요 ??그리고 5 옆에는 비워두고 1 ( 무시 ) , 2 ( 무시 ) 6을 적으신것도 어떤 규칙이 있는건가 ? 궁금해서 여쭤봅니다 !
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-I 질문있습니다.
http://boj.kr/5c6791ecb33241cab42be762031958c3안녕하세요 큰돌님이번 문제는 강의를 봐도 잘 이해가 되지 않아서 핵심으로 짚어준 부분을 참고하여 제가 로직을 구현했는데, 어려움이 있어 질문드립니다.백준 문제에서 주어진 예제는 정답이 나오는데, 아래 링크의 질문 게시판에 있는 반례는 모두 틀리게 나옵니다.https://www.acmicpc.net/board/view/89304코드에 사용되는 변수는 다음과 같습니다.x = bfs로 방문하는 수빈이의 현재 위치t = 수빈이가 해당 위치에 도착하는 최단 시간bp = 해당 시간(t)에 동생의 현재 위치제가 생각해낸 방법은 다음과 같습니다.먼저 동생이 앞으로 가며 위치에 도달하는 시간을 brother[] 배열에 기록했습니다. 수빈이가 동생을 만날 수 있는 방법을 다음 두 가지로 분류했습니다. (1) 수빈이가 앞으로 가며 특정 위치에서 동생과 만난다.(2) 수빈이가 동생보다 먼저 앞으로 간 다음에, 왔다갔다 하며 동생을 기다린다. (이 때 홀수, 짝수 시간으로 동생과 만날 수 있는지 확인한다.)bfs를 단계 별로 구현하기 위해 5분 45초에 나오는 플루드 필(?)을 수빈이가 해당 위치에 도착하는 최단 시간(변수 t)로 구현하였습니다.+제 코드의 오류를 하나 발견하였는데 다음과 같습니다.예제 n = 18, k = 66 를 넣었을 때, 수빈이는 18 36 37 38 76 순으로 방문하고, 동생이 66, 67, 69, 72, 76 순으로 방문 했을 때 정답인 4초가 나오지만, 제 코드 상으로는 76을 최단 시간인 3초에 방문할 수 있으므로, 수빈이가 동생을 만나지 못한다고 판단하여 만날 수 있는 다음 지점을 답으로 출력합니다.위와 같은 오류를 어떤 논리로 잡아야 할지 아무리 생각해도 모르겠고, 강사님의 코드도 도저히 이해가 가지 않아 질문 드립니다. ㅠㅠ
-
해결됨[파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
백준 DFS
백준을 기준으로 하시는 이유가 있나요 ??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
동생이 도착한 시간 - 수빈이가 도착한 시간 이 짝수일 때
http://boj.kr/c287b933ed0442d4ba02329f7601b61b선생님, 안녕하세요.동생의 위치를 미리 구해놓고, 수빈이가 그 위치에 갈 수 있는지를 구하는 식으로 했습니다.bfs를 이용했고, bfs의 로직 안에 현재 수빈이가 동생보다 빨리 방문했을 때를 처리하는 로직을 넣었는데요. 강의에서 설명해주셨던 것처럼, +1 -1을 하면 제자리로 돌아올 수 있고, 이때 2초가 걸리기 때문에 시간차가 반드시 짝수여야만 수빈이가 동생을 찾을 수 있기 때문에,동생이 오는 시간 - 현재 수빈이가 오는 데 걸린 시간 이 짝수 일때, 동생이 오는 시간을 최소값으로 넣는 로직을 넣었습니다.그런데 답이 틀렸다고 나와서, 1)왜그런건지? 2)visited배열을 2차원으로 한거랑 무슨 차이가 있는지 궁금합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
동생이 도착한 시간 - 수빈이가 도착한 시간 이 짝수일 때
http://boj.kr/c287b933ed0442d4ba02329f7601b61b선생님, 안녕하세요.동생의 위치를 미리 구해놓고, 수빈이가 그 위치에 갈 수 있는지를 구하는 식으로 했습니다.bfs를 이용했고, bfs의 로직 안에 현재 수빈이가 동생보다 빨리 방문했을 때를 처리하는 로직을 넣었는데요. 강의에서 설명해주셨던 것처럼, +1 -1을 하면 제자리로 돌아올 수 있고, 이때 2초가 걸리기 때문에 시간차가 반드시 짝수여야만 수빈이가 동생을 찾을 수 있기 때문에,동생이 오는 시간 - 현재 수빈이가 오는 데 걸린 시간 이 짝수 일때, 동생이 오는 시간을 최소값으로 넣는 로직을 넣었습니다.그런데 답이 틀렸다고 나와서, 1)왜그런건지? 2)visited배열을 2차원으로 한거랑 무슨 차이가 있는지 궁금합니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이렇게 풀어봤는데 괜찮을까요?
function App() { const solve = (m ,arr) => { let answer = 0; let n = arr.length; arr.sort((a,b) => (a[0] + a[1]) - (b[0] + b[1])); // 50% 쿠폰, 상품 for (let i = 0; i < n; i++) { let money = m - (arr[i][0] - arr[i][1]); let cnt = 1; for (let j = 0; j < n; j++) { if (j === i) { continue; } money = money - (arr[j][0] + arr[j][1]) if (money > 0) { cnt ++; } } if (answer < cnt) { answer = cnt } } return answer } const arr = [[6,6],[2,2],[4,3],[4,5],[10,3]]
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-D 질문있습니다!
문제에서 주어지는 조건은 맨 왼쪽 아래가 (0,0) 지점이라고 했는데 2차원 배열로 생각해보면 맨 왼쪽 위가 (0,0) 입니다. 강사님의 코드를 출력해보면 이런식으로 나오는데 문제에 있는 그림이랑 비교해보면 위치가 반대입니다. 이렇게 나오는 이유가 위에서 언급한 (0,0)의 기준이 맨 밑에서 왼쪽인지, 맨 위에서 왼쪽인지의 차이인듯 한데 상관없는건가요..?
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
백트래킹 관련해서 질문 드립니다!
n = int(input()) # 식재료 개수 minimums = list(map(int, input().split())) # 최소 영양소 기준 ingredients = [list(map(int, input().split())) for _ in range(n)] # 재료들 # 선택한 식재료를 담을 배열 초기화 picked = [] result_picked = [] # 최소 비용 초기화 (정답값) min_cost = 987_654_321 # 조건 확인 def is_bigger(sum_nutrients): global minimums for i in range(4): if sum_nutrients[i] < minimums[i]: return False return True # subset 구하기 def recursion(k): global picked, min_cost, result_picked if k == n: # 재료를 모두 선택했다면 # 뽑은 재료가 조건에 만족하는지 확인 # picked의 영양소들의 합이 minimums의 각 최소 영양소보다 커야 함 # 뽑은 재료의 각 영양소의 합을 담기 sum_nutrients = [0, 0, 0, 0] sum_cost = 0 for i in range(len(picked)): sum_cost += ingredients[picked[i]][4] # 비용 담기 for j in range(4): sum_nutrients[j] += ingredients[picked[i]][j] # 최소 영양소보다 큰 지 확인 # 근데 사전 순으로 가장 빠른 것을 출력해야 한다. # 어떻게 ? if is_bigger(sum_nutrients) and sum_cost <= min_cost: if sum_cost < min_cost: min_cost = sum_cost # 최소 비용 업데이트 result_picked = picked[:] # 선택한 배열 저장 elif sum_cost == min_cost and picked < result_picked: result_picked = picked[:] return # 뽑은 재료의 인덱스를 picked에 담고 picked.append(k) recursion(k + 1) # 다음 재료 선택 # 재료 선택 안하는 경우엔 picked.pop() # 현재 재료를 빼고 recursion(k + 1) # 다음 재료 선택 recursion(0) # 출력 if min_cost == 987_654_321: print(-1) else: print(min_cost) res = [x + 1 for x in result_picked] print(*res) 19942 다이어트 문제입니다.저는 항상 백트래킹 할 때 이렇게 매개변수를 그냥 간단히 하는 식으로 하는데, 강사님은 매개변수에다가 설정을 하시더라구요강의보면서 직관적이기도 하고 되게 좋은 방법이라고 생각했는데,이렇게 해도 상관없나요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
질문입니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요.다음은 제가 처음에 푼 코드입니다.#include <bits/stdc++.h>using namespace std;int N;string S,temp1,temp2,Q;int main(){ cin>>N; cin>>S; temp1 = S.begin(); temp2 = S.end(); for(int i = 0 ; i<N ; i++){ cin >> Q; if(Q.begin() == temp1 && Q.end() == temp2){ cout<<"DA\n"; } else cout<<"NE\n"; }}저는 앞뒤글자들을 temp1,temp2에 저장해두고 새로 입력 받은 string또한 앞과 뒤를 비교하는 코드를 작성했습니다. 선생님 강의를 듣고 처음 한글자가 아닌 *을 기준으로 문제를 풀어야한다는 것을 알게됬습니다. 그런데 위 코드에서 문법적인 오류가 있는 것 같은데 문법적으로만 왜 오류인지 궁금합니다.감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
질문있습니다!
안녕하세요! 강의와는 다른 방식의 로직으로 풀어보았습니다.v 라는 방문처리 할 수있는 배열을 만들었습니다. 재료 배열을 순회하면서 M에서 해당 값을 뺏을 때 배열에 그 값이 있다면 입력값의 위치와 M-해당값의 위치를 방문 처리 해주면서 결과값을 count 하였습니다. Test case는 맞다고 뜨는데 제출하면 틀렸다고 뜨네요ㅜㅜ문제에 맞지 않는 잘못된 코드 일까요...?http://boj.kr/eb03bcf5031743d9a74c8465cb6a703c
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-I 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.80287934번 소스 코드 (acmicpc.net)큰돌님의 코드와 달리atoi함수로 벡터에 추가한후 정렬하였습니다.정답은 같게 나오는데 틀린 이유를 알고싶습니다ㅠ
-
미해결김영한의 실전 자바 - 중급 2편
comparable 질문
안녕하세요.강의에서 다음의 코드를 비교한 걸 보여주셨을 때 콘솔에 출력되는 개수가 다른데 왜 그런걸까요 ? 자바 버전에 따라 내부 구현된 정렬 알고리즘이 달라서 그럴까요 ? (강의는 출력 2개)@Override public int compareTo(MyUser o) { System.out.println(this + "vs " + o); return this.age < o.age ? -1 : (this.age == o.age ? 0 : 1); }MyUser{id='B', age=10}vs MyUser{id='A', age=30}MyUser{id='C', age=20}vs MyUser{id='B', age=10}MyUser{id='C', age=20}vs MyUser{id='A', age=30}MyUser{id='C', age=20}vs MyUser{id='B', age=10}
-
미해결김영한의 실전 자바 - 중급 2편
shuttle.showinfo를 호출시 실행창 질문
package generic.test.ex3 object UnitPrinter { //제네릭 메서드 fun <T : BioUnit>printerV1(t: Shuttle<T>){ println(t.showInfo()) } fun printerV2(shuttle: Shuttle<out BioUnit>){ println(shuttle.showInfo()) } fun <T : BioUnit>printerV3(t: Shuttle<T>){ val unit = t.out() println("이름: ${unit.name} hp:${unit.hp}") } fun printerV4(shuttle: Shuttle<out BioUnit>){ val unit = shuttle.out() println("이름: ${unit.name} hp:${unit.hp}") } }자바와 코틀린은 100퍼센트 호환이 된다고 해서 코틀린으로 강의를 보고있습니다.강의에선 v1과 v2로 인자로 받은 셔틀에서 unit을 꺼내어 내용을 출력했는데요. 그렇게 안하고 셔틀에서 바로showinfo를 호출해서 실행창에name : 마린 hp : 40kotlin.Unitname : 마린 hp : 40kotlin.Unit이렇게 줄바꿈으로 kotlin.Unit이라는게 자동적으로 붙는데 왜이런건가요 . 강의에서처럼 unit을꺼내어서 출력하면 안붙습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
9996번 런타임에러
#include <bits/stdc++.h> using namespace std; vector<string> split(string input,string delimiter){ vector<string> ret; int delimiterPosition; while((delimiterPosition=input.find(delimiter))!=string::npos){ ret.push_back(input.substr(0,delimiterPosition)); input.erase(0,delimiterPosition+delimiter.length()); } ret.push_back(input); return ret; } int main(){ int N; cin>>N; fflush(stdin); string pattern; getline(cin,pattern); vector<string> splited_strings=split(pattern,"*"); string first=splited_strings[0],last=splited_strings[1]; string input[N]; for(int i=0;i<N;i++) cin>>input[i]; for(int i=0;i<N;i++){ // 접두사 if(first!=input[i].substr(0,first.size())) { // 없으면 cout<<"NE\n"; continue; } else input[i].erase(0,first.size()); // 있으면 // 접미사 if(input[i].find(last)==string::npos) { // 없으면 cout<<"NE\n"; continue; } else{ // 있으면 if(last==input[i].substr(input[i].size()-last.size())) cout<<"DA\n"; else cout<<"NE\n"; } } return 0; }어디서 런타임에러를 유발하는 지 모르겠습니다.
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
graph를 2차원 배열 또는 List로 하는 기준을 어떤식으로 잡으면 좋을까요...?
아직 2차원 배열 또는 List로 해야되는것을 선택하는 기준이 잘 안잡히는데 문제에서 원하는 출력 형태가 연결된 모든 것들을 출력하는 느낌으로 질문한다면 List 이고, 그외에는 2차원 배열로 하면 될까요...? ㅠㅠ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-H 질문있습니다
http://boj.kr/a2bc8496dc1046a495a22dd0185ad515여기 제 코드입니다.a만큼의 크기를 가진 배열 arr을 사용해서가장 최근의 a일의 온도를 저장합니다.최근 a일간의 온도의 최대값은 결국 새로 들어온 값이 가장 오래된 날짜보다 높다면 최대값이 변경되는것이니해당 부분을 if문으로 처리해서 sum값을 변경시켰는데오답이 나옵니다.구간마다 sum을 계산하여 max값을 비교한다면 맞다고 하는데제 방식이 왜 틀렸는지 이해가 가질 않습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
주난의 난 질문
저는 bfs와 dfs를 혼용하는 방식으로 코드를 짯는데 이렇게 짜면 단점이 어떤게 있을지 궁금합니다.큰돌님 항상 강의 잘 듣고 있습니다 감사합니다.#include <iostream> #include <vector> #include <algorithm> #include <queue> #include <stack> using namespace std; int dx[4] = {0, 0, 1, -1}; int dy[4] = { 1, -1, 0, 0 }; int N, M, startX, startY, endX, endY; char board[300][300] = { 0 }; int visit[300][300] = { 0 }; queue<pair<int, int>> q; void print() { for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cout << board[i][j] << " "; } cout << "\n"; } cout << "\n"; } void print2() { for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cout << visit[i][j] << " "; } cout << "\n"; } cout << "\n"; } void dfs(int x, int y, int a) { //print2(); visit[y][x] = a; for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (nx <0 || nx > M || ny <0 || ny > N) continue; if (!visit[ny][nx] && board[ny][nx] == '0') { dfs(nx, ny, a); } else if (!visit[ny][nx] && (board[ny][nx] == '1'|| board[ny][nx] == '#')) { board[ny][nx] = '0'; visit[ny][nx] = a; q.push({ nx, ny }); } } } void bfs() { q.push({ startX-1, startY-1 }); visit[startY-1][startX-1] = 1; while (!q.empty()) { //print2(); int x = q.front().first; int y = q.front().second; q.pop(); for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (nx <0 || nx > M || ny <0 || ny > N) continue; if (!visit[ny][nx] && board[ny][nx] == '1') { q.push({ nx, ny }); visit[ny][nx] = visit[y][x] + 1; board[ny][nx] = '0'; } else if (!visit[ny][nx] && board[ny][nx] == '0') { dfs(nx, ny, visit[y][x] + 1); if (visit[endY-1][endX-1]) return; } else if (!visit[ny][nx] && board[ny][nx] == '#') { visit[ny][nx] = visit[y][x] + 1; return; } } } } int main() { char symbol; cin >> N >> M; cin >> startY >> startX >> endY >> endX; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cin >> symbol; board[i][j] = symbol; } } bfs(); cout << visit[endY - 1][endX - 1]-1; }
-
미해결김영한의 실전 자바 - 중급 2편
해시 알고리즘6 - 해시 충돌 구현 메모리 구조 관련 질문드립니다!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 영한님 항상 정성이 담긴 강의해주셔서 대단히 감사합니다:)다름이 아니라 해당 부분 강의를 들었을 때 LinkedList와 배열의 조합으로 메모리 구조가 잘 떠오르지 않아서 제가 생각한 부분이 맞는지 질문드리는 점 양해 부탁드립니다(_ _)LinkedList 인덱스 배열[9] 부분에 9와 99가 같이 들어가는데요, 영한님께서 설명해주셨던 LinkedList 강의 부분 메모리 구조 그림으로 예를 든다면 배열[9] 부분에 노드가 이런식으로 두 개가 생성되는 것이 제가 이해한 부분이 맞을지 질문드립니다!항상 감사합니다 :))