오랜만에 프로그래머스에 놀러왔더니,
새로운 문제가 업로드가 되어서 너무 기쁜 나머지 하나 풀어보고
해설을 남기게 되었습니다.
카카오 답게, 문제의 퀄리티가 상당한 것을 확인할 수 있었습니다.
덕분에 재밌게 풀었습니다 ^
레벨2 문제 치고는 약간 난이도가 있다는 느낌을 받으셨을거라고 추측되는데요.
그래프 유형의 문제라 좀 더 어렵게 느껴질 수도 있을겁니다.
문제를 간단히 보자면 일자 모양으로 생긴 막대 그래프, 8자 모양으로 순환하는 8자 그래프,
둥그렇게 순환하는 도넛 그래프 이렇게 3개의 유형의 그래프를 임의로 생성하고,
임의의 공간에 임의의 정점 1개를 생성하고 정점으로 부터 출발하여 각 그래프로 이엇다고 했을 때,
[새로 생성한 임의의 정점 번호, 도넛 그래프 갯수, 막대 그래프 갯수, 8자 그래프 갯수]
이렇게 출력 해내는 것이 최종 목표가 됩니다.
그런데, 문제를 읽고 어디서부터 해야하는지 감이 안잡히시는 분들도 계실 것 같습니다.
애초부터 시작 지점을 모르는데, 이 문제를 어떻게 풀어내냐고 생각하시는 분들도 있을 것 같습니다.
하지만, 문제를 잘 살펴보면, 중점을 특정할 수 있게 도와주는 몇 개의 규칙이 존재합니다.
이를 한 번 같이 살펴보겠습니다.
이를 위해서는 각 그래프의 특징과 중점의 특징을 살펴보아야 합니다.
탐색할 수 있는 길이 없으면막대 그래프라는 특징을 가지고 있습니다.그래프의 간선은 정점당 하나씩 단방향으로 이어져있다는 사실을 알 수 있습니다.순환그래프라는 특징이 있습니다.같은 정점을 재방문 하게 되었을 때, 그 정점이 시작과 같다면그래프의 간선은 정점당 하나씩 단방향으로 이어져있다는 사실을 알 수 있습니다. 2개 존재합니다.2개 존재한다는 의미는 특정 정점에서 2개의 경로로 분기되는 기점을 제공하게 됩니다.중점이 되는 정점에서2가지의 방향으로 가는 간선을 가지고 있게 됩니다.이렇게 각각의 그래프에 대한 특징과 중심 정점에 대한 특징을 정리하였습니다.
이를 잘 조합하게 된다면, 문제를 푸는건 순식간입니다.
우선적으로는 중심정점을 찾아야겠죠?
중심정점에 대한 조건을 잘 생각하여, 확실히 찾을 수 있도록 해봅시다.
그리고, 중심 정점에서 나오는 간선의 목적지가, 각 그래프의 시작점이 되게 됩니다.
각각의 그래프를 탐색하여,
시작 정점을 재방문할 경우에는 도넛 모양의 그래프,
더 이상 갈 수 있는 정점이 없는 경우에는 막대 모양의 그래프,
경로가 2개 존재하는 정점이 존재한다면, 8자 모양의 그래프
이렇게 구별해서, 답을 반환해주면 성공적으로 문제를 풀 수 있게됩니다.
또한, 문제에서는 정점의 갯수를 주어지지 않았기에, Map 자료 구조를 사용한다면,
좀 더 편하게 그래프 탐색을 수행할 수 있을 겁니다.
글 읽어주셔서 감사합니다!
중심 정점 판단을 나가는 간선 3개 이상일 때와 그렇지 않을때로 나눠서 2개 이하일땐 전체 탐색으로 풀었슴다. 풀긴 풀었지만 뭔가 아니다.. 싶었는데 역시나 테케가 좀 어려웠으면 틀렸겠네요 ㅠㅠ 진입간선 생각을 전혀 못 했었는데 감사합니다~!
매 번 퀄리티 높은 해설 감사합니다! 잘 보고 있습니다 :)
`1,ㅑㅏ; ';[']]
오 아이디어 덕에 더 간결한 코드로 풀수 있었습니다.ㅎㅎ 감사합니다 !