안녕하세요. 현재 강의 잘 따라가면서 꾸준히 복습하고 있는 학생입니다. 다름이 아니라 호기심에 대기업 코딩테스트 기출문제들을 훓어봤는데요. '어떤 알고리즘을 써야겠다'는 커녕 문제의 이해조차도 어렵더라구요 ㅠㅠㅠ 아주 낙담했습니다.. 선생님께서는 여러 대기업 코딩테스트를 합격하신걸로 아는데, 선생님께서도 이러한 경험이 있으셨나요? 문득 지금 이렇게 알고리즘을 공부해도 나중에 실전에 가서 잘 써먹을 수 있을까? 라는 생각이 자꾸만 들더라구요.. 그래도 이 악물고 하는중입니다... 실전에서도 강한 실력을 키우기 위해서 강의와 함께 병행하면 좋은것이 뭐가 있을까요? 계속 알고리즘 문제를 푸는 방법밖에는 없을까요? 확신이 안 서네요 ㅠㅠ
안녕하세요. 선생님 ! 선생님 강의 잘 듣고 있는 컴공과 대학생입니다. 제가 이번에 소프트웨어 마에스트로를 준비하려고 합니다. 방학 때 프로젝트를 하나 한 뒤 준비를 시작해서 시간이 얼마 남지 않았습니다. 이번에 소마는 1차(2월 22일), 2차(3월 8일)로 나뉘어 있고 1, 2차에 어떤 문제가 나오는지 알려줘서 1차를 먼저 집중해서 공부하려고 합니다. 1차 전형 문제는 아래와 같습니다. (기본 알고리즘) 기본적인 알고리즘(완전탐색, 정렬 등)과 자료 구조(배열, 스택, 큐 등)를 이해하고 적절히 활용할 수 있는 능력 검증 (SQL) JOIN, UNION 등 기본적인 함수를 사용한 쿼리를 작성할 수 있는 SQL 활용 능력 검증 2차 전형 문제는 아래와 같습니다. (심화 알고리즘) 복잡한 알고리즘(동적계획(DP), 깊이/너비 우선 탐색(DFS/BFS), 그래프 등)과 고급 자료 구조를 활용할 수 있는 능력 검증 (SQL) 다양한 함수를 활용한 복잡한 쿼리를 작성할 수 있는 SQL에 대한 깊은 이해와 활용 능력 검증 여기서 여쭙고 싶은 게 2가지 있습니다. 선생님께서 준비해주신 문제와 강의가 DFS나 BFS가 2주차에 나와있습니다. 이 부분은 건너뛰고 3주차를 풀어도 되는지 궁금합니다. 강의 목록에 보면 정렬이 포함된 섹션이 없는 것 같습니다. 혹시 준비해주셨는데 제가 못 찾은 것은 아닌지 아니면 따로 공부 해야 하는건지 궁금합니다. 여기까지가 질문입니다. 감사합니다.
강사님 안녕하세요. 매번 알고리즘을 미루다가 이제 더이상 미룰 수 없어 빠듯하게 학습을 진행하고 있습니다. 강의 관련된 내용은 아니라 질문 드려도 될지 잘 모르겠네요. 문제가 된다면 삭제하겠습니다. 1) 뒤집어 질 경우 2) 첫 번째 원소가 0인지 1인지 이런 문제를 해결할 수 있는 방법?을 떠올리기 까지 시간이 너무 오래 걸려요. (못 떠올리긴 했지만) 떠올리기 까지도 시간이 너무 오래걸려서 결국 정답 코드를 확인하곤 합니다. 과연 학습을 하여도 이런 방법을 떠올릴 수 있을지 걱정이 앞서네요. 제가 제대로 된 학습방법을 가지고 학습을 하고 있는걸까요? 저는 Java로 코딩 테스트를 준비하고 있습니다. 강의 자료(노션)에 있는 원 문제 링크를 들어가 혼자 문제를 먼저 풀어보곤 해요. 그러고 이해가 안되는 건 해설 영상을 보거나, 개념이나 이론 부분은 영상을 봅니다. 제가 풀 수 있는 문제는 해설 영상을 건너뛰고 있습니다. 혼자 문제를 풀 때는, 원 문제 링크를 들어가 문제를 손으로 풀어보고 이해를 합니다. 문제를 보고 위에 작성한 1) 뒤집어 질 경우와 같은 해결할 수 있는 방법을 두서없이 주석에 막 적습니다. 그러고 이 방법이 맞겠는데? 싶으면 주석으로 수도코드를 작성합니다. 그러고 코드를 작성하고, 입력과 출력을 비교하며 제출을 합니다. 모든 공부법에 정답은 없겠지만, 제 학습법이 효율적인 학습법인지 + 저에게 맞는 학습법인지 모르겠습니다. 해결할 수 있는 방법을 떠올리는게 너무 힘들어요. 컴퓨터식 머리(?)가 부족한걸까요. 해결법을 떠올리는게 힘드네요. 잘 떠올리고 싶어요. 긴 글 읽어주셔서 감사합니다. 문제가 되면 삭제하겠습니다.
안녕하세요 큰돌님! 백준 알고리즘 문제를 풀다 보면, 자꾸 최적화 욕심이 나곤 합니다. “이렇게 하면 더 나을 것 같은데?” 하며 풀다보면 시간이 꽤 흐르기도 합니다. 취업을 위한 코딩 테스트 공부에서는 단순히 문제의 의도에 맞춰 통과하는 것을 목적으로 해야 할까요? 아니면 더 효율적이고 확장 가능한 방법을 고민해보는 것도 의미가 있을까요? 아래 코드는 큰돌님 코드보다 빠르게 동작하긴 하지만, 문제가 변형되어 예를 들어 N=10이 아니라 N=100이고, 필요한 평수가 5가 아니라 10평인 경우에도 가격을 미리 계산하고 정렬(sorting)하는 방식이 여전히 효율적일지는 잘 모르겠습니다. 문제를 풀 때 주어진 조건보다 더 확장 가능한 상황까지 신경을 쓰고 싶은데 아직 방법이 떠오르지는 않는 것 같습니다. 이런 고민은 점차 후반 주차 문제를 풀면서 자연스럽게 해결되는 문제일까요? 아니면 현재 단계에서도 고민해 보는 것이 바람직한 걸까요? 조언 주시면 정말 감사하겠습니다! https://www.acmicpc.net/source/88073260 #include <bits/stdc++.h> using namespace std; struct Land { int price; int y; int x; }; bool isValid(const Land& a, const Land& b) { return abs(a.x - b.x) + abs(a.y - b.y) >= 3; } int p[10][10]; int N; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> N; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { cin >> p[i][j]; } } vector<Land> flowers; for (int i = 1; i < N - 1; i++) { for (int j = 1; j < N - 1; j++) { int price = p[i][j] + p[i - 1][j] + p[i + 1][j] + p[i][j - 1] + p[i][j + 1]; flowers.push_back({price, i, j}); } } sort(flowers.begin(), flowers.end(), [](const Land& a, const Land& b) { return a.price < b.price; }); int minCost = INT_MAX; int flowerCount = flowers.size(); for (int i = 0; i < flowerCount - 2; i++) { for (int j = i + 1; j < flowerCount - 1; j++) { if (!isValid(flowers[i], flowers[j])) continue; int currentCost = flowers[i].price + flowers[j].price; for (int k = j + 1; k < flowerCount; k++) { if ((currentCost + flowers[k].price) >= minCost) break; if (!isValid(flowers[i], flowers[k]) || !isValid(flowers[j], flowers[k])) continue; minCost = currentCost + flowers[k].price; } } } cout << (minCost == INT_MAX ? -1 : minCost) << '\n'; return 0; }
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 어떤 알고리즘을 학습하고 계신가요? 여기까지 이해하신 내용은 무엇인가요? 2. 어려움을 겪는 부분 어느 부분에서 막히셨나요? 코드의 어떤 로직이 이해가 안 되시나요? 어떤 개념이 헷갈리시나요? 3. 시도해보신 내용 문제 해결을 위해 어떤 시도를 해보셨나요? 에러가 발생했다면 어떤 에러인가요? 현재 작성하신 코드를 공유해주세요 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊 안녕하세요 현재 2-10 수강중에 있습니다! 문제 풀면서 예제 문제에서 링크드리스트 구현은 딩코딩코님이 제공해주고 계신데요. 실제 코딩테스트를 봤을 때 링크드리스트 구현은 직접해야하는걸까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하십니까 선생님, 이 문제 보자마자 bfs보단 dfs가 먼저 생각이 났고 머릿속에서도 dfs로 시뮬레이션 해보니까 과정이 잘 그려져서 dfs로 진행을 했습니다. 링크 : http://boj.kr/020903cff23948a9be3332ad6a3787fb 그러고 강의를 보니, 큐를 두 개나 만들어서 bfs로 푸시는 과정이 제가 작성한 코드보다 메모리도 훨씬 적게 사용하고 시간도 빠른 걸 보고 어떻게 바로 저런 생각이 들어서 문제를 풀 수 있는지 신기하면서도 제가 과연 시험장에서 비단 이 문제뿐만이 아니라 어떤 문제에 대해서 최대한 메모리를 적게 사용하며 시간도 적게 걸리는 풀이로 풀 수 있을지 고민이 많이 됩니다. 조언 부탁드립니다..
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 저도 선생님하고 같은 생각으로 접근했고 비슷하게 코드를 짤려고 했습니다. 하지만 1시간 2시간 넘어 가니까 이거는 강의봐야겠다라는 생각을 했습니다. 강의를 보고 좀만 더 생각해볼걸 그랬나라는 아쉬움이 강하게 드는데 선생님은 이럴 때 좀만 더 고민하면 풀릴거 같으면 몇시간이고 풀릴 때 까지 계속 하시나요???
안녕하세요 큰돌님. 저번에 비슷한 고민을 올렸었는데 아직 고민인게 있어서 남깁니다. 현재 개발 공부를 3개월째하고 있고 c언어와 자료구조 공부를 하고나서 큰돌님 강의를 듣고 있어요. 2-E 문제부터는 저번에 말씀드린 것처럼 1시간 이상을 고민해도 코드 구현을 하지 못하는 문제들이 거의 대다수이네요. 현재는 고민 해보는 시간은 가지고 나서 큰돌님 영상보고 따라 쳐보고 다시 영상보고 한줄 한줄 분석하면서 1, 3, 7, 21일 기준으로 문제를 30분내에 풀때까지 복습중인데. 이렇게 하면 문제를 암기를 하는게 아니인지, 이런 방식으로 계속해도 되는지가 궁금해서 다시 질문 남깁니다. 다른 공부를 하고 돌아와야할까요 아니면 이런 식으로 우직하게 진행하면 알고리즘 실력이 늘까요? 좋은 강의 감사합니다.
안녕하세요 선생님, 강의 잘 듣고 있습니다 최근 고민이 생겼는데요, 코드 고착화 현상(제가 이름 붙였습니다..ㅎㅎ) 코드 고착화 코드 고착화는 "아.. 이전에 풀었던 문제에서는 이런식으로 안풀었었는데.."하며 새로운 풀이를 창의적으로 만드는 것을 방해하는 나쁜 현상입니다! 현재 상황 먼저 이전 동전 2문제는 풀었는데 이번 동전 1 문제는 풀지 못하였습니다. 이전 문제에서 for(i in N) for(j in M) 이런식으로 풀이를 했었는데, 이 부분에 계속 얽매여서 동전 1 문제를 풀때 창의적인 풀이를 하지 못했습니다. 최근 이런식으로 점점 문제를 외우면서 풀게만 되는 것 같아 고민입니다! 스스로 특정 유형을 풀면 풀수록 창의력 있게 풀이를 만들어내는 느낌이 아닌 이전의 풀이에서 계속 날먹?할려고만 하는 것 같습니다. 현재 저는 너무 겁이 많은것 같은데 어떡하면 선생님처럼 막힘없이 새로운 풀이를 만들어내고 코테 마스터가 될수있을까요???