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