https://school.programmers.co.kr/learn/courses/30/lessons/258711
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제




1. 막대 모양 그래프
2. 8자 모양 그래프
3. 도넛 모양 그래프
4. 루트 정점
-> 구해야하는 항목들이다
처음엔 dfs, bfs 를 떠올렸다 각각 모양의 그래프를 체크하고 ? 루트도 찾고 ? 싸이클도 찾고? 좀 머리가 지근거렸다.
웃기긴한데 좀 카카오스럽게? 빡구현인가? 방향 그래프네? 진출 차수? 진입 차수? 로 생각을 하다보니
그래프 별로 진출 차수 ,진입 차수의 규칙이 하나씩 보이기 시작했다.
규칙 1 .
루트 정점 : 진입 차수 - 0 개 , 진출 차수 - 2개 이상
막대 그래프 : 진입 차수 - 1개 , 진출 차수 - 0 개
8자 그래프 : 진입 차수 - 2개 이상 , 진출 차수 - 2개 이상
사실 사이클 구하기가 너무 싫었다 ㅋㅋ.. 입출력 예시를 보면 ? --> 루트 정점으로 부터 그래프가 뻗어 나온다
즉?
도넛그래프 수 = 루트 정점의 진출 차수 개수 - (막대 그래프 수 + 8자 그래프 수)
정답 코드
// 이때 당신은 그래프의 간선 정보가 주어지면
// 생성한 정점의 번호와
// 정점을 생성하기 전 도넛 모양 그래프의 수,
// 막대 모양 그래프의 수,
// 8자 모양 그래프의 수를 구해야 합니다.
import java.util.*;
class Solution {
public int[] solution(int[][] edges) {
int[] answer = new int[4];
//정점번호, [진출차수 , 진입차수] 저장할 Map 선언
HashMap<Integer, int[]> map = new HashMap<>();
//맵 초기화
for(int[] edge : edges) {
int from = edge[0];
int to = edge[1];
if(!map.containsKey(from)) {
map.put(from,new int[] {0,0});
}
if(!map.containsKey(to)) {
map.put(to,new int[] {0,0});
}
// 시작 정점의 진출 차수를 1더해준다
map.get(from)[0]++;
// 도착 정점의 진입 차수를 1더해준다
map.get(to)[1]++;
}
//1번 노드 부터 제일 큰 노드번호 까지 순회
for(int i=1; i<=map.size(); i++) {
if(map.get(i)[0] >= 2 && map.get(i)[1] == 0) {
answer[0] = i; //루트 정점 노드번호 삽입
}
else if(map.get(i)[0] == 0) { //막대 그래프 -> 해당 노드 i의 진출 차수가 0이라면
answer[2]++;
}
else if(map.get(i)[0] >= 2 && map.get(i)[1] >= 2) { // 8자 모양 그래프수 -> 진입차수 2개 이상, 진출차수 2개 이상
answer[3]++;
}
}
//전체 그래프수 -> 생성 정점의 진출 차수 - (막대 모양 그래프 수 + 8자 모양 그래프 수)
answer[1] = map.get(answer[0])[0] - (answer[2] + answer[3]);
// 루트 정점 , 도넛 모양 그래프의 수, 막대 모양 그래프의 수, 8자 모양 그래프의 수
return answer;
}
}'프로그래머스' 카테고리의 다른 글
| 부대복귀 <JAVA> - Dijkstra (0) | 2024.03.12 |
|---|---|
| 과제 진행하기 <JAVA> - Level2 (0) | 2024.01.28 |
| 2024 KAKAO WINTER INTERNSHIP - N + 1 카드게임 <JAVA> (1) | 2024.01.26 |
| 2019 KAKAO BLIND RECRUITMENT - 길 찾기 게임 <JAVA> (2) | 2024.01.24 |
| [Programmers] [PCCP 기출문제] 2번 / 석유 시추 <JAVA> (0) | 2024.01.22 |