묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
6강 탑다운 DP - 상담 (#14501) 질문 있습니다!
recur(idx) 함수의 첫 번째 if 문인 if (idx == N - 1) return 0; 에서 0을 리턴하는 이유가 궁금합니다.제가 이해하기론 N - 1은 마지막 일자의 상담이고 마지막 일자의 상담에 걸린 경우 무조건 받는 것이 퇴사 전 돈을 더 많이 받기에 이득이라고 이해를 했는데요. 그렇다면 0을 리턴하는 것이 아닌 그 마지막날 상담에 받는 돈의 값을 리턴하는 게 맞는 게 아닌가 하는 생각이 들었습니다. 또한 idx > N - 1의 경우 dp 에 들어있는 돈의 값에 영향을 주면 안되므로 이 경우에는 if (idx > N - 1) return 0; 이지 않을까 하는 생각도 듭니다. 이런 의문점이 드는게 제가 문제를 잘 이해하지 못하고 접근하고 있는 것 아닌가 싶어서 질문드립니다~ 요즘 쉬운 설명의 강의 너무 잘 듣고 있습니다~ 감사합니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-D 질문입니다
http://boj.kr/b9694422323942259c6e0971b71621681987번 문제에서는 시작 지점이 왼쪽 상단으로 고정되어 있는데 만약에 시작 지점이 어디든 될 수 있다면 위의 코드 41번째 줄부터 43번째 줄까지를ffor (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { vis[i][j] = 1; alpha[board[i][j] - 'A'] = 1; solve(i, j, 1); vis[i][j] = 0; alpha[board[i][j] - 'A'] = 0; } }위의 코드로 바꾸면 알맞은 답이 나오는지 알고 싶습니다.
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
SearchToRemove와 RemoveNode가 분리되어야 할 필요가 있을까요?
RemoveNode를 직접 먼저 구현한 후 강의를 듣게 되었는데요,저는 RemoveNode 안에 Search하는 코드를 통합해서 짰는데 SearchToRemove가 RemoveNode를 실행시키기 위해서만 필요하다면 굳이 분리를 해야 할까 하는 의문이 들었습니다.하나의 함수는 하나의 동작만 실행해야 해서 분리가 된 것일까요? 아니면 SearchToRemove가 나중에도 사용이 될 가능성이 있어서 분리된 것일까요?제가 작성한 코드를 첨부합니다. void RemoveNode(const char* pszName) { USERDATA* pTmp = g_pHeadNode; USERDATA* previousNode = NULL; bool isFound = false; // 노드 찾기 while (pTmp != NULL) { if (strcmp(pTmp->name, pszName) == 0) { isFound = true; break; } previousNode = pTmp; pTmp = pTmp->pNext; } // 노드 찾기 실패 if (isFound == false) { printf("\"%s\" : Not Found, remove failed.\n", pszName); return; } // 헤드인 경우 if (g_pHeadNode == pTmp) { g_pHeadNode = pTmp->pNext; free(pTmp); printf("\"%s\" : Found, remove successed.\n", pszName); return; } // 헤드가 아닌경우 previousNode->pNext = pTmp->pNext; free(pTmp); printf("\"%s\" : Found, remove successed\n", pszName); }
-
해결됨코딩테스트 [ ALL IN ONE ]
동적계획법 (3) 문제로 배우는 DP
탑다운 방식인데 위에 그림처럼 바텀업처럼 문제를 아래서 부터 해결해 나가서요.강의에서는 피보나치가 탑다운 방식으로 푸는 경우가 있는데 바텀업 방식처럼 문제를 아래서(위에 그림 빨간색표시처럼) 부터 해결한다고 하셨는데요. 혹시 계단 문제도 피보나치처럼 탑다운 방식인데 문제를 아래서 부터 해결해나가는 스타일인건가요?문제를 읽고 탑다운으로 풀지 바텀업으로 풀지 어떻게 알아요?
-
미해결코딩테스트 [ ALL IN ONE ]
ㅇ
탑다운 방식인데
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
소수점
만약 소수점 #자리까지 표현해야 하는 문제는그냥 printf 쓰는게 낫나요?아니면 cin함수를 유지하되 precision 같은 함수를 쓰는게 낫나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-O 관련 질문이 있습니다.
안녕하세요 큰돌님!정확히는 6-O에 국한된 질문은 아니지만6-O 2565 전기줄 문제 풀다가어떻게 풀지 감이 잘 안잡혀서 영상보고내가 직관력이 부족한건가 싶어서 여쭙습니다.이번 6주차, 이분 탐색과 LIS를 하면서이분 탐색은 제가 연습량이 부족한거 같아 solved.ac실버 난이도 무지성 박치기 하니깐 이제 감이 좀 잡혔습니다.다만, LIS 관련 문제는 "최장 증가 수열" 이란 단어가 없으면 LIS를 이용할 생각이 전혀 안나요.6-O 강의를 보면서 정말 깜짝 놀랐습니다. 어떻게 LIS를 이용해서 푸실 생각을 하신건지...실제로 문제중에 "최장 증가 수열"이란 단어가 없음에도 LIS를 이용해 풀이가 가능한 문제들이 많은가요?
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
투포인터 3번(#16472) 조건문 순서 질문드립니다!!
안녕하세요, 선생님. 매일매일 강의 잘 듣고 있습니다!오늘은 투포인터를 공부하다 제가 작성한 코드와 제공해주신 정답 코드의 조건문을 확인하는 순서에 차이가 있어서 질문드립니다. 해당 문제를 풀 때 while 문 안의 아래 2가지 조건을 확인하는데요, 조건 1 if arr[e] in letter:조건 2 if len(letter) < N:제가 풀어봤을 때 저는 조건1 > 조건 2를 확인하도록 구현을 했는데정답 코드는 조건2 > 조건 1를 확인하더라구요. 물론 저는 실제 정답인 4와는 달리 답이 5가 나와서 코드가 어디에선가 잘못되긴 한 것 같은데틀린 이유가 조건문에 순서와 상관없이 제가 단순히 잘못 구현한 것인지아니면 반드시 조건문을 조건2>조건1의 순서로 확인해야되는 문제인지 판단이 서지 않아 질문드립니다! 그리고 앞으로 다른 문제를 풀 때도 어떤 조건을 먼저 확인해야 되는 것인지 어떻게 판단하면 좋을지 판단 기준이 있는지도 궁금합니다 ^^#[나의 코드] N = int(input()) arr = list(input()) s = 0 e = 0 letter = [] letter.append(arr[s]) ans = 0 while s < len(arr) and e < len(arr): ans = max(ans, e-s+1) if arr[e] in letter: ####### 조건 1 e += 1 else: if len(letter) < N: ####### 조건 2 letter.append(arr[e]) e += 1 else: s += 1 e = s letter = [arr[s]] print(ans)#[정답 코드] n = int(input()) arr = list(input()) arr.pop() #inch-worm s = 0 e = 0 letters = [] letters.append(arr[s]) dist = 0 start_flag = -1 while s < len(arr) and e < len(arr): # print(s,e,letters) dist = max(dist, e-s+1) if len(letters) <= n: ########조건 2 e += 1 if e < len(arr) and arr[e] not in letters: #######조건 1 letters.append(arr[e]) if len(letters) > n : s = s+1 e = s letters = [arr[s]] print(dist)
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
05_adtFileIO 프로젝트 문의
안녕하세요. 선생님! 소스 보다가 하나 발견한 부분 공유드립니다.프로젝트이름: 05_adtFileIO소스파일: singleList.c함수명: SearchListByName Q. 해당 함수는 Key값으로 조회하여 데이터를 로드하는 함수입니다.현재는 파일에서 매번 로드하도록 되어있는데캐싱된 데이터(pDataCache)가 있다면, 파일에서 읽어올 필요가 없을것 같아 문의드립니다.추가로 테스트 해보니Search(Kim) > Edit 0 > 수정완료 > Commit X > Search(Kim) 를 하면Edit에서 수정했던 데이터가 없어지는 현상이 있습니다.이미지의 흰 네모안의 로직(주석포함)은 추가해본 부분 입니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
BFS 당근마켓 방문 겸 가중치 처리 질문입니다.
visited[nextY][nextX] = visited[nowY][nowX] + 1;로 방문 겸 가중치를 처리해주는데 가중치가 업데이트가 되지 않습니다. (모든 visited 배열이 1로 표시됨)혹시 이유가 있을까요 ㅜㅜ붙잡고 있어도 어디가 문제인지 잘 모르겠네요.http://boj.kr/fc00f1fba57c469881ce2b1aff27fc66 +) 탐색은 잘 진행됩니다.visited 배열 출력 첨부하니 참고해주시면 감사하겠습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 p79 질문드립니다
안녕하세요 큰돌님!교안 p79에 memset() 개념에서char형의 하나의 문자(a, b, c, 등..)으로 초기화도 가능하다고 하셨는데, 어떻게 초기화하면 될까요?#include <bits/stdc++.h> using namespace std; const int max_n = 1004; int a[max_n]; int a2[max_n][max_n]; int main() { memset(a, 'a', sizeof(a)); memset(a2, 0, sizeof(a2)); for (int i = 0; i < 10; i++) cout << a[i] << ' '; cout << '\n'; return 0; } 위의 예제 코드를 실행하면1633771873 1633771873 1633771873 1633771873 1633771873 1633771873 1633771873 1633771873 1633771873 1633771873 가 나옵니다ㅠㅠ 그리고 교안 80p에 예제코드로 올려주신 아래 코드가 잘못된 것 같습니다 🙂 수정해주시면 감사하겠습니다.#include <bits/stdc++.h> using namespace std; int main() { int cnt = 0; int a[5] = { 0, }; while (++cnt != 10) { for (int i = 0; i < 5; i++) a[i] = i; a[5] = { 0, }; for (int i : a) cout << i << ' '; cnt++; } return 0; }
-
해결됨코딩테스트 [ ALL IN ONE ]
LIFO 관련 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요LIFO 1번째 문제 소스 여기에서elif not stack or stack.pop() != p:해당 부분해서 stack.pop()을 해줌과 동시에 pop한 값이 p와 같은지 아닌지 비교해보는 걸까요?실질적으로 pop이 등장하는 부분이 저 부분밖에 없어서 헷갈리네요ㅠㅠ
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
뭐가 틀린것인지 잘 모르겠습니다
n , m = map(int,input().split()) lst=[list(map(int,input().split())) for _ in range(n)] dy=[0]*(m+1) ch=[[] for _ in range(m+1)] for i in range(n): for j in range(lst[i][1],m+1): if dy[j] < dy[j-lst[i][1]]+lst[i][0] and (i not in ch[j-lst[i][1]]): ch[j]=ch[j-lst[i][1]] + [i] dy[j] =dy[j-lst[i][1]]+lst[i][0] print(max(dy))제가 짠 코드는 원래값이랑 리스트돌면서 이 시간만큼썼을때 더해지는 점수랑 비교해서큰값으로 바꿔주는것입니다.만약 리스트돌면서 이 시간만큼썼을때 더해지는 점수가 컸을때는 해당하는 문제를 푼것이 되니깐 ch에 그 index가 있는지 없는지를 비교해서 있으면은 안바꿔주고 없으면은 바꿔주는것입니다.만약에 없어서 바꿔주면은 ch에 그 index를 추가하는 방식으로 구현을했는데 왜 틀린것인지 모르겠습니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-M 질문
안녕하세요 큰돌님!회전에 대한 아이디어를 떠올리지 못해서4방향에 대해서 dfs 돌리면서 구현해 보았는데TC는 다 통과하는데 바로 틀렸다고 나와서 질문 드립니다 ㅠㅠ 어느 부분을 신경쓰지 못한 걸까요? 일단 저는 3가지 pair<int,int>형 배열을 사용하고3가지 함수를 구현 했습니다. 우선 3가지 pair<int,int> 배열입니다.pair<int, int> startPos[4] = { {0,0},{20,0},{0,0},{0,20} }; // 위,아래,왼,오 부터 시작할때의 시작 위치 pair<int, int> NextRow[4] = { {0,1},{0,1},{1,0},{1,0} }; // 각 방향에 대해서 다음 줄로 이동하기 위한 pos 양. ex) 위일 경우 한줄하고 다음 열로 가서 해야함 pair<int, int> NextPos[4] = { {1,0}, {-1,0},{0,1},{-1,0} }; // 한 줄에 대해서 다음 Pos로 가기 위한 이동 양. ex) 위일 경우 0번행부터(열고정) 끝 행까지 검사해야 한다.3가지 함수 프로토 타입입니다.void dfs(int cnt, int curIdx); void moving(int dirIdx, int PivotIdx, int InputIdx); void updataMaxRet(int findIdx);dfs : 최대 5번까지의 이동을 하기 위함. dfs에 들어가면 4방향에 대해서 이동한다.dfs에서 각 방향에 대해서 호출되는 함수로. 새로운 배열에 이동된 값들을 넣어준다.이동된 새로운 배열에 대해서 최대값 업데이트 코드 링크는 여기있습니다.http://boj.kr/d56849369aa34f00b3ffea60647a4816
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-I 문제 , 함수 질문
강의에서는 atoi(s.c_str()) 를 쓰는데혹시 stoi 함수랑 개념이 같나요?두 함수 모두 string 에서 int 형으로 변환하는데어떤 차이가 있나요?저는 for(int i=0;i<m;i++){cin >> s;if(atoi(s.c_str()) == 0) cout<<A[s] << "\n";else cout << B[atoi(s.c_str())] << "\n";} 이 부분을 for(int i=0;i<m;i++){ cin >> s; if(isdigit(s[0])){ cout << B[stoi(s)] << "\n"; } else{ cout << A[s] << "\n"; } }이렇게 해봤네요
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-X 시간초과 질문입니다!
https://www.acmicpc.net/source/74215560안녕하세요 ㅠ시간 초과가 왜 나는 건지 잘 모르겠습니다...제가 계산한 것에 따르면1. 모든 경우의수 4^82. 기준 방향 설정 x43. 기준 방향을 중심으로 4방향 탐색 후 감시 방향 기록 (최대 3방향, 가로,세로 8칸) x (64+64(복사))=> 34백만 정도맞왜틀일까요..ㅠㅠ
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
LIS/LCS 2번 문제
안녕하세요! 질문드립니다~추가강의 LIS/LCS 2번 문제(#9251)를 백준에서 채점을 하다가 발견한 사실인데요 아래 정답 코드에서 import sys sys.stdin = open('/Desktop/dev/BackJoon/추가강의/LIS/9251.txt','r') sys.setrecursionlimit(999999) input = sys.stdin.readline A = str(input()) N = len(A) B = str(input()) M = len(B) dp = [[0]*(M+1) for _ in range(N+1)] for i in range(1,N+1): for j in range(1,M+1): # if A[:i][-1] == B[:j][-1]: if A[i-1] == B[j-1]: dp[i][j] = dp[i-1][j-1]+1 else: dp[i][j] = max(dp[i-1][j], dp[i][j-1]) print(dp[N][M]) import sys sys.stdin = open('/Desktop/dev/BackJoon/추가강의/LIS/9251.txt','r') sys.setrecursionlimit(999999) input = sys.stdin.readline 위의 이 부분을 지우고 돌리면 성공하는데, 위의 부분이 있을 때 채점 초반에 틀렸다고 하네요. 혹시 이번 문제에서는 input이 띄어쓰기가 없는 문자열이라서 input = sys.stdin.readline부분 때문에 에러가 난 것인지 궁금해서 질문드립니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 질문
http://boj.kr/8edf26bd4812427b8ea57ea5702bf7aa 저는 이 문제를 , 예를 들어, string key 로 ab*ba 를 받는다고 하면substr() 와 find()함수를 이용하여 이전 문자들은 start에 저장, 이후 문자들은 end에 저장하였습니다.이후에 name 문자열에 n만큼 받으면 name을 받을때 마다 ssubstr와 length()함수를 이용하여 start와 end를 비교하여 문제를 푸는 방식으로 풀었습니다.출력은 제대로 나오는데 백준에서는 틀렸다고 나옵니다. 어디가 틀린걸까요?
-
미해결Do it! 알고리즘 코딩테스트 with Python
Python sys.stdin.readline() 사용
안녕하세요.구간합구하기 (백준 11660) 문제를 풀고 있는데요.코드는 똑같은데, 제일 상단에 아래 코드 입력 여부에 따라 시간초과/성공이 갈립니다.import sysinput = sys.stdin.readline 이게 실패와 성공을 가를만큼 중요한 역할을 하나요?위 코드를 넣으면 왜 빨라지는지 설명해주실 수 있으실까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-G 질문있습니다.
https://www.acmicpc.net/source/74183426 정말 단순하게, 한칸 이동 혹은 2배 이동으로 뻗어나가는 재귀를 구현하였습니다.테스트 케이스는 통과했는데 시간초과가 나네요..이게 맞기는 한 코드인지 판단이 안되어 질문 남깁니다.로직이 맞는 지 한 번 검토 부탁드리겠습니다..