일주일동안 코딩 테스트에 등장하는 모든 유형의 문제를 익히고 문제 양치기로 감각을 끌어올리는 것이 목표이다. 일정이 너무 빡세서 하루 계획을 못지키게 되자 궁여지책으로 사용한 GPT가 의외로 큰 도움이 되어 기록&공유하고자 VELOG를 켰다.
삼성전자에서 제공하는 양질의 온라인 코딩테스트 자료&강의가 무려 공짜로 공개된다. 회원가입이 필요하지만(약간 귀찮지만 10분가량 레벨 테스트도 봐야한다) 전공 수업때 도무지 이해가 안갔던 부동소수점 개념을 6분짜리 강의만으로 이해해버렸다. 언어(C, Java, Python)+자료구조+알고리즘 강의로 이루어져있으며 강의시간이 짧아서 부담이 적기에 Advanced 알고리즘 강의부터 들었다.
백준은 도무지 정이 안간다. 불친절한 UI와 가독성 떨어지는 문제때문에 피로도가 정말 크다. SQL 고득점 Kit가 괜찮았던 프로그래머스의 알고리즘 고득점 Kit를 선택했다. level 1, 2는 무난하게 풀렸고 해시, 힙, 그래프 등 특정 유형에서 막혀 강의를 수강한 뒤 재도전했다. 확실히 유형이 분류가 되어있기에 큰 힌트가 되고, 레벨 순서대로 풀다보면 성취감도 느낄 수 있어 좋았다.
프롬프트 엔지니어링과 퓨샷 기법을 활용해 chatgpt를 나만의 과외 선생님으로만들 수 있다. 사용한 프롬프트는 아래와 같다.
다음 문제를 쉬운 문제 여러 개로 쪼개줘. 단계별로 풀어나가면서 필요한 개념을 학습할 수 있도록 구성해줘. 예를들면 재귀함수, 그래프의 개념, 연결리스트 등등 주관식 문제도 괜찮고 코드 구현 문제도 괜찮아. 단, 사용자가 작은 문제들을 모두 해결하면 본 문제를 해결할 수 있어야만 해. 그리고 절대로 완성된 답안을 주면 안돼.
문제 설명
n개의 노드가 있는 그래프가 있습니다. 각 노드는 1부터 n까지 번호가 적혀있습니다. 1번 노드에서 가장 멀리 떨어진 노드의 갯수를 구하려고 합니다. 가장 멀리 떨어진 노드란 최단경로로 이동했을 때 간선의 개수가 가장 많은 노드들을 의미합니다.
노드의 개수 n, 간선에 대한 정보가 담긴 2차원 배열 vertex가 매개변수로 주어질 때, 1번 노드로부터 가장 멀리 떨어진 노드가 몇 개인지를 return 하도록 solution 함수를 작성해주세요.
제한사항
노드의 개수 n은 2 이상 20,000 이하입니다.
간선은 양방향이며 총 1개 이상 50,000개 이하의 간선이 있습니다.
vertex 배열 각 행 [a, b]는 a번 노드와 b번 노드 사이에 간선이 있다는 의미입니다.
입출력 예
예제의 그래프를 표현하면 아래 그림과 같고, 1번 노드에서 가장 멀리 떨어진 노드는 4,5,6번 노드입니다.
이 문제를 해결하기 위해 단계별로 접근할 수 있는 작은 문제들로 쪼개보겠습니다. 문제를 해결하기 위해 필요한 개념과 각 단계에서 해결해야 할 문제들은 다음과 같습니다.
개념 학습
- 그래프 이론 기초:
- 무엇이 그래프인지 이해하기.
- 노드(정점)와 엣지(간선)에 대해 배우기.
- 그래프가 어떻게 연결 리스트로 표현되는지 배우기.
- 그래프 탐색 알고리즘:
- 너비 우선 탐색(BFS)와 깊이 우선 탐색(DFS)의 차이점 배우기.
- BFS 알고리즘이 왜 최단 거리를 찾는 데 적합한지 이해하기.
- 자료 구조:
- 큐(Queue)의 개념 이해하기.
- 큐를 사용하여 BFS 알고리즘 구현 방법 배우기.
- 알고리즘 구현:
- 재귀함수 대신 반복문을 사용하는 이유 이해하기.
- BFS 알고리즘을 이용하여 각 노드까지의 거리를 계산하는 방법 배우기.
문제 분해
- 그래프 생성:
- 주어진 간선 정보를 사용하여 그래프의 연결 리스트 생성하기.
- 예:
vertex
배열을 받아서 그래프의 인접 리스트로 변환하기.- BFS 알고리즘 구현:
- 1번 노드에서 시작하여 BFS를 사용하여 각 노드까지의 최단 거리 계산하기.
- 각 노드까지의 거리를 저장할 수 있는 배열 또는 맵을 만들기.
- 최대 거리 노드 계산:
- 모든 노드를 탐색하며, 가장 먼 거리에 있는 노드들 찾기.
- 최대 거리에 있는 노드들의 개수를 카운트하기.
- 결과 반환:
- 가장 멀리 떨어진 노드들의 개수를 반환하기.
순차적 접근
- 연결 리스트로 그래프를 만들기.
- BFS 알고리즘으로 각 노드까지의 최단 거리 계산하기.
- 최대 거리를 가진 노드들의 개수 세기.
- 그 개수를
return
하기.이 코드는 주어진
vertex
정보로부터 그래프를 생성하고, BFS 알고리즘을 사용하여 각 노드까지의 최단 거리를 계산한 다음, 가장 먼 거리에 있는 노드들의 수를 세어서 반환합니다.
이 정도만 해도 훌륭하다. 하지만 핵심 활용 꿀팁은 이후부터이다.
그럼 이제 개념학습 부분의 질문을 차례로 던져줘. 학생이 답을하면 다음 질문을 하는 식으로 하나씩 질문해줘. 학생의 답을 보고 부족한 개념이 있다면 보충 설명도 해줘. 필요하다면 그림을 그려서 설명해줘도 좋아.
훌륭합니다! 그러면 첫 번째 개념 학습으로 시작하겠습니다.
그래프 이론 기초:
- 질문: 그래프란 무엇이며, 그래프를 구성하는 기본 요소는 무엇인가요?
그래프는 노드와 엣지로 구성이 되어있습니다. 예시를 들어볼게요, 내 페이스북 친구가 있어요. 그 친구의 친구들이 있을 거 아니에요? 그 친구의 친구들이 서로 어떻게 연결되어있는지. 예를 들면 리락이가 친구가 쿠마밖에 없어요. 근데 쿠마는 인싸여서 멍멍이랑 초코랑 미니랑 미나랑 서로 알고 있어요. 또, 쿠마가 좋아하는 연예인 피글렛, 이요르는 쿠마만 알고 그들은 쿠마를 몰라요. 이런 식으로 친구들(노드)의 관계(엣지)를 표현할 수 있는 자료구조가 그래프예요. 그래프를 통해 알 수 있는 것은, 하나의 정보가 리락이로부터 시작되었고 한 번에 한 명에게만 그 정보를 전달할 수 있다면, 모두가 그 정보를 알게되기까지 얼마나 걸릴지 등을 해결할 수 있어요.
정확합니다! 그래프는 노드(또는 정점)와 엣지(또는 간선)로 구성되어 있으며, 이를 통해 서로 다른 객체들 간의 관계를 모델링할 수 있습니다. 노드는 개별적인 객체를 나타내며, 엣지는 노드들 사이의 연결 또는 관계를 나타냅니다. 페이스북 친구 관계로 설명하신 것처럼, 그래프는 소셜 네트워크, 컴퓨터 네트워크, 지도 등 다양한 시스템에서 복잡한 관계를 표현하는 데 사용됩니다.
다음으로 진행하겠습니다.
그래프 탐색 알고리즘:
- 질문: 깊이 우선 탐색(DFS)와 너비 우선 탐색(BFS)는 각각 어떤 특징을 가지고 있으며, 어떤 상황에서 적합한지 설명해 주실 수 있나요?
공유 감사합니다 ㅎㅎ 덕분에 알고리즘 공부하는데 gpt를 유용하게 사용할 수 있네요 😁