문과생도 이해하는 알고리즘 강의를 가르치는 강사 개발자로 취직하기입니다 :)
저는 문과생 출신으로 현재는 8년차 대기업 개발자입니다. 처음 코딩을 접하고 코딩 테스트 준비를 하던 막막한 시절을 떠올리며, 어떻게 하면 조금 더 쉽게 설명할 수 있을지, 저 같은 비전공자 문과생도 이해하고 새로운 기술을 습득할 수 있을지 고민하며 강의를 제작하고 있습니다.
유튜브 통해서도 무료 강의 진행하고 있으니 많은 관심 부탁 드립니다!
https://www.youtube.com/@gaebal
👋🏼 멘토 소개
안녕하세요 :) 문과생으로 대기업에 취업해 8년차 임베디드(반도체) SW 개발자입니다.
개인 유튜브 채널을 통해 코딩테스트와 취업 전반의 콘텐츠를 다룬 덕분에 프로그래머스/엘리스에서도 코딩테스트 입문 강의를 제작하고 수강생분들을 상담하고 있는 크리에이터입니다.
제 콘텐츠와 상담 방향이 궁금하신 분들은, 제가 유튜브 댓글로 상담 드린 아래의 사례들과 유튜브 채널에 올리는 취업 관련 콘텐츠를 참고해보셔도 좋을 것 같습니다!
유튜브 링크 : https://www.youtube.com/@gaebal
✅ 유튜브 댓글 상담 사례 1
✅ 유튜브 댓글 상담 사례 2
✅ 유튜브 댓글 상담 사례 3
🏃🏻♀️ 가능한 멘토링 분야 및 진행 방식
- 코딩테스트 1:1 과외
- 프로그래머스 / 백준에서 코딩테스트 문제를 풀며 문제가 잘 안 풀리거나 어떻게 접근해야 할지 전략을 세우기 어려운 분들을 위한 1:1 과외를 제공합니다.
- 어려웠던 문제를 상담 신청 시 알려주시면 구글밋을 통해 온라인으로 자세하게 설명해 드립니다.
- 멘토링 세션 당 1개 문제를 설명해 드리고, 실제 상담 시간은 30분을 초과해도 한 문제에 대해서 최대한 설명해 드리니, 시간이 부족할 걱정은 하지 않으셔도 됩니다!
- 설명 가능한 언어는 Python/Java/C/C++ 입니다.
- 외안되?! - 내 코드가 죽는 이유 대리 디버깅
- 가끔 문제를 풀다 보면 "정답이랑 똑같은데 이게 왜 틀렸지?!"라고 답답하신 경우들 있으시죠? 이런 분들을 위해 전체 코드를 대신 분석해 드리는 상담입니다 :)
- 멘토링 세션 당 최대 2개 문제를 선택하셔서 질문 주시면, 이메일을 통해서 어디가 왜 틀렸는지, 그리고 이런 실수를 다시 하지 않기 위해서 주의할 부분들에 대해서 짚어드립니다.
- 프로그래머스 / 백준에 있는 문제는 모두 가능하고, 언어는 Python/Java/C/C++까지 가능합니다!
- 대기업 취업/커리어 상담
- 문과생/비전공자가 개발자로 취업하며 겪는 고충에 대해 상담해드리고, 당연히 전공자 분들도 상담 가능합니다!
- 부트캠프를 가야할까요? 독학할까요?
- 코테 실력이 늘지 않는데 어떻게 하면 좋을까요?
- 어떤 언어로 코딩테스트를 준비해야 할까요?
- 프로젝트와 포트폴리오는 어떻게 준비해야 할까요?
- 멘토링 신청 시 본인의 현 상황/경력/대학 학점 등을 최대한 구체적으로 말씀해 주시면, 그 상황에 맞게 구글밋을 통해 상담해 드립니다!
- 대기업 자기소개서 첨삭 및 컨설팅
- 대기업/중소기업에 제출할 자기소개서를 첨삭해 드리고 멘티분의 취업 컨셉을 잡도록 도와드립니다.
- 회사의 입장에서 취업은 유능한 인재를 선출하는 과정이기 때문에, "나"라는 개발자는 어떤 장점이 있는지 잘 부각시키는 것이 중요합니다.
- 본인의 장점이 자소서에 잘 묻어나올 수 있도록 컨셉과 전략을 잡아드리고, 최종 제출 전 마지막 최최최종 첨삭을 원하시는 분들을 위해서는 첨삭을 진행해 드립니다!
- 컨셉/전략 등 상담이 필요한 분들은 구글밋을 통해 온라인으로 상담을 진행합니다.
- 자소서 첨삭이 필요한 분들은 멘토링 신청 시 전달해 주신 자소서를 이메일을 통해 첨삭하여 전달해 드립니다!
- 현재 상황을 자세하게 설명해주시면 그만큼 더 깊이 있는 상담을 할 수 있으니 되도록 많은 내용 전달해주시면 좋습니다 :)
🔎 진행 방식
멘토링이 확정되면 구글밋 링크를 제공해 드려, 구글밋을 통한 화상회의 상담을 기본으로 하고 있고, 저도 현업에서 근무 중이라 얼굴은 나오지 않고 상반신만 나오는 상태에서 상담을 진행합니다.
간혹 온라인 상담보다 이메일/댓글 상담을 선호하시는 분들도 있어서, 원하신다면 이메일 상담도 가능합니다. 동일한 내용을 글로 정리하여 전달해 드리고 있으니 원하시는 분들은 이메일로 답변 달라고 해주시면, 정해진 멘토링 세션까지 답변드리겠습니다!
📚 멘토링에 필요한 준비
- 4개 상담 항목 중 어떤 항목을 원하시는지 알려주세요!
- 구글밋 상담 혹은 이메일/댓글 상담 중 원하시는 방법을 선택해 주세요! (이메일/댓글을 원하시는 경우 이메일 주소도 알려주세요)
- 문제 풀이 관련 상담을 원하신다면 프로그래머스/백준 문제의 링크를 첨부해 주시고, 본인이 고민했던 내용을 최대한 적어주세요. 어떤 부분에서 잘못 생각했는지 알면 훨씬 더 쉽게 설명해 드릴 수 있습니다!
- 커리어 상담/자소서 첨삭을 원하신다면 현재 상황에 대해서 최대한 자세하게 말씀해 주세요! 학력, 전공, 학점, 경력 등 공개 가능한 부분까지 최대한 알려주세요. 개인 정보는 양질의 상담을 위해 참고하고 전부 삭제하고 있으니 공개할 수 있으신 범위 내에서 최대한 알려주세요 :)
강의
수강평
- [파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
- [파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
- [파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
- [자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
게시글
질문&답변
침투/섬개수 질문
안녕하세요 정구호님 🙂 입력 형태는 문제에서 주어지는 예제 입력 형태를 보고 설명과 함께 유추할 수 있습니다! 대부분의 경우 이 부분은 헷갈리지 않도록 명확하게 적어주고 있어서, 예제 형태를 그대로 적용하시면 될 것 같습니다! 그리고 다음 추가 질문에 대해 답변 드리자면하나더 질문이 있는데 섬의개수에서for i in range(1,H+1)row = list(map(int,input().split()))이 부분으로 그래프를 채울수 있는거 아닌가요? 이 코드 이후에 것(for j in range(1, M + 1): map_[i][j] = (row[j - 1] == 1))들은 왜 구현한건지 이해가 잘안됩니다row 변수는 한 행에 해당하는 입력 값을 하나의 list로 입력 받은 것이고, 이 정보를 다시 map에 반영하기 위해서는 row list의 값을 확인하여 하나씩 입력해줘야 하기 때문에 이렇게 넣었습니다!
- 1
- 2
- 59
질문&답변
노드간 거리 계산
안녕하세요 nurugji님 🙂 말씀하신 대로 대부분의 경우에는 사이클이 없는 구조, 즉 트리 형태에서 주로 사용됩니다. 이 경우, 노드 u와 v 사이의 경로는 유일하기 때문에 count 변수를 이용해 거리를 쉽게 계산할 수 있습니다.그러나 사이클이 존재하는 그래프에서도 몇 가지 추가 처리를 통해 이 방식을 사용할 수 있습니다. 예를 들어:방문 여부(visited 배열)를 관리하여 이미 방문한 노드를 다시 방문하지 않도록 처리하면 사이클을 무시할 수 있습니다.DFS 시작점을 고정하고, 각 노드의 거리를 기준점(루트 또는 특정 노드)으로 계산한 후, 두 노드의 거리를 비교하여 결과를 구할 수 있습니다.하지만 일반적으로 사이클이 있는 그래프에서는 BFS나 다익스트라 알고리즘과 같은 방법이 더 안정적이고 효율적일 수 있습니다.따라서 사이클이 없는 경우에는 설명 드린 방식이 유효하지만, 사이클이 있는 경우에는 위와 같은 추가 처리를 고려해 주시면 더 정확한 결과를 얻을 수 있습니다.혹시 추가로 궁금하신 부분이 있다면 알려주세요! 감사합니다 :)
- 1
- 1
- 48
질문&답변
재귀함수 질문
안녕하세요 🙂 우선 두 함수를 더 정확하게 예제로 작성해주시면 질문을 이해하기 더 쉬울 것 같아요. 여기서 베이스 케이스가 정확히 어떤 의미인지 확실하지 않아서 답변 드리기 고민되는데, 현재 이해한 대로 답변 드리고 부족한 부분 있으면 추가 질문 부탁드려요!두 코드의 동작은 동일합니다. Python에서는 명시적으로 return을 작성하지 않아도 함수가 끝나면 암묵적으로 None을 반환하고 종료됩니다. 따라서 두 코드 모두 실행 결과는 동일하며, 동작에 차이는 없습니다. 그러나 코드 작성 의도와 가독성 면에서 약간의 차이가 있습니다.첫 번째 코드에서는 return을 명시하지 않아 함수가 자연스럽게 종료되도록 작성한 것으로, 특별히 함수 종료를 강조하지 않습니다. 이 경우, 단순히 함수의 끝에서 아무 작업도 하지 않고 넘어가는 상황이라면 적합합니다.두 번째 코드에서는 return을 명시적으로 작성하여 함수가 해당 위치에서 종료된다는 것을 분명히 나타냅니다. 이는 베이스 케이스를 명확히 구분하고자 하거나, 함수 종료를 코드 상에서 의도적으로 강조하고 싶을 때 사용합니다. 특히 협업 상황에서 코드의 의도를 명확히 전달하기 위해 유용할 수 있습니다.결론적으로 두 코드의 실행은 같지만, 첫 번째 코드는 단순하고 암시적인 종료를 의도한 경우에 적합하고, 두 번째 코드는 의도를 명확히 표현하고 싶을 때 더 적합합니다. 상황에 따라 적절한 방식을 선택하면 됩니다.
- 1
- 1
- 60
질문&답변
안녕하세요, 혹시 다른문제도 여쭤볼 수 있을까요?
안녕하세요 김예현님!강의가 도움 되셨다니 다행입니다. 원래는 다른 문제 답변은 못 드리는데, 이번 문제는 저도 이미 풀었던 문제라 간단하게 답변 드리겠습니다 🙂 작성하신 코드에 따르면 DFS 순서와 입력 순서가 정확히 일치하는 경우에는 정답이 나오지만, 둘이 일치하지 않을 경우에는 오답이 나올 수 있을 것 같아요. 트리 구조는 고려하지 않는 단순 비교 방식이라 둘이 같아야만 1을 출력하여 오답이 되지 않을까 싶습니다.제 생각에 더 나은 답안은 DFS를 사용해서 트리 구조를 분석하고, 서브트리 크기와 깊이를 고려해야 입력 순서가 달라지더라도 트리 구조상 유효한지 아닌지를 판단하고 1 혹은 0을 제대로 출력할 수 있을 것 같습니다!제 답안 참고로 보내드리니 DFS 순서와 입력 순서가 다른 경우를 두 코드로 돌려보시면서 차이를 보셔도 이해에 도움 될 것 같습니다. 공부 화이팅하세요!import java.util.*; public class Main { static int N; static ArrayList[] graph; static boolean[] visited; static int[] level, tsize; static int[] order; public static int dfs(int node, int lv) { if (visited[node]) return 0; visited[node] = true; level[node] = lv; int size = 1; for (int next : graph[node]) { size += dfs(next, lv + 1); } tsize[node] = size; return size; } public static void main(String[] args) { Scanner input = new Scanner(System.in); N = input.nextInt(); graph = new ArrayList[N + 1]; visited = new boolean[N + 1]; level = new int[N + 1]; tsize = new int[N + 1]; order = new int[N]; for (int i = 1; i (); } for (int i = 0; i = N) continue; int next = order[i + tsize[node]]; if (level[next] > level[node]) { System.out.println(0); return; } } System.out.println(1); } }
- 1
- 1
- 44
질문&답변
촌수계산(백준 2644) 질문
AI AI 님 안녕하세요 🙂이 경우에는 가장 작은 노드부터 시작하지 않아도 동일한 답이 나올 수 있을 것 같아요!다만 작은 노드부터 큰 노드까지 방문하는 게 직관적이기도 하고 코드 구현도 단순해서 이렇게 많이 구현하는 것 같습니다 🙂 현재는 두 노드 간의 거리를 계산하는 문제와 같으니 동작에 차이는 없을 것 같습니다!
- 1
- 2
- 83
질문&답변
다른 주제 강의
안녕하세요 AI AI님! 죄송스럽게도 아직 구체적인 일정이 나온게 없습니다 ㅠ 조금씩 추가 준비는 하고 있지만, 계획에 없던 대학원 생활을 하게 되고, 생각보다 널널하지 않다는 걸 와보고서야 알게 되었네요 ㅠ. 그래도 아예 포기한 것은 아니고 최대한 틈 내서 준비하고 있습니다..!! 얼른 더 좋은 강의로 돌아오겠습니다!
- 1
- 2
- 79
질문&답변
최근에 올린 질문, 코드블럭으로 공유드립니다!
예현님 안녕하세요! 제 생각에는 출력해야 되는 내용을 잘못 이해하셔서 문제가 발생하는 것 같은데, 공교롭게도 예시에서는 그 차이가 뚜렷하게 보이지 않아서 헷갈리는 것 같습니다.우선 문제에서 요구하는 건 '각 숫자가 출력된 순서' 이기 때문에, 우리가 배열에 담아야 하는 값은 '순서'이고, 담아야 할 배열의 위치(index)가 숫자가 되는 겁니다. 그래서 결과적으로 answer[2] = 4라고 한다면 2번 노드는 4번째 방문됐다 라는 것이 문제에서 요구한 것이고, 그래서 정답이 위에 말씀해주신 제 코드처럼 나오게 됩니다!예현님께서 작성하신 코드는 반대로 '각 순서에 출력된 숫자'를 구현하셨기 때문에 배열에 담기는 값이 '숫자(idx)'이고, 위치가 순서가 됩니다. 한 가지 예시를 들자면, dfs 동작 상 노드 방문 순서가 다음 같다고 가정할게요: 1 -> 5 -> 2 -> 3 -> 4. 그러면 예현님 답은 이 순서 그대로 출력을 하겠지만, 문제에서 원하는 답은 1 3 4 5 2 가 될겁니다.왜냐하면 1은 첫번째 방문했고, 2는 3번째 방분, 3은 4번째 방문, 이런 식이기 때문입니다! 결론은 코드는 문제가 없어보여서 잘 나오는데, 다만 문제에서 의도한 정답을 잘못 이해하셔서 그런 것 같습니다! 문제 다시 한번 확인해보시고 혹시 추가로 궁금한 점 있으면 말씀해주세요!!
- 1
- 1
- 60
질문&답변
질문이 있습니다. dfs 메서드에 order를 이렇게 구현하면 안되는 이유가 무엇인가요?
안녕하세요 예현님 🙂 코드를 스크린샷 말고 코드 블럭으로 공유 부탁드립니다!공유해주시는 대로 확인해보겠습니다~
- 0
- 2
- 71
질문&답변
Max로 초기화하는 이유
안녕하세요 color.park님 🙂 우선 결론부터 말씀 드리자면 n+1, m+1로 하셔도 됩니다! 이렇게 작성하는 게 더 최적화된 답변일 수 있어서 손에 익으신 다음에는 이렇게 작성하는 것이 더 좋을 것 같습니다.다만 제가 MAX로 초기화 하는 이유는 1) 코드를 단순하게 작성해서 공부하실 때 수월하시기 위해서와 2) 혹시라도 예상하지 못한 불량을 방지하기 위해서입니다! n+1, m+1로 당연히 될 줄 알지만 꼭 하나씩 더 필요하거나, 예상과 달라지는 경우들이 생기고, 시험장에서 이런 경우가 발생하면 멘탈 관리가 어려워서 떨어지시는 분들이 많더라고요. 나중에 알고보니 그냥 max로 초기화했으면 아무런 문제가 되지 없어서 한번 더 멘탈이 나가곤 하셔서, 메모리를 살짝 낭비하는 대신 문제를 안전하고 빠르게 맞추는 것이 나을 것 같아 이렇게 추천드립니다! 그렇지만 굳이 필요없다고 판단되시면 최적화 하셔도 됩니다 :)
- 1
- 2
- 109
질문&답변
백준 24479 문제 제출 결과 "틀렸습니다" 라고만 나와서 어떤 부분이 틀렸는지 잘 모르겠어요 피드백 부탁드립니다
AI 인턴보다 한 발 늦었지만 두 가지 수정하면 될 것 같습니다! 엣지 읽기 루프:엣지를 읽는 루프가 1부터 N + 1까지 반복되는데, M개의 엣지를 읽어야 합니다. 현재 구현은 N이 M보다 크면 필요한 것보다 더 많은 엣지를 읽을 수 있습니다!방문 순서 초기화:방문 순서(visitOrder)가 시작 노드 R로 초기화됩니다. 방문 순서는 1부터 시작하되, 첫 노드 번호를 R로 초기화 하도록 수정하면 정답이 될 것 같습니다 🙂
- 1
- 3
- 157