반응형
package com.ji.main;

import java.util.Arrays;
import java.util.PriorityQueue;

public class DiscoController {

	public static void main(String[] args) {
		int result = solution(new int[][] { { 0, 3 }, { 1, 9 }, { 2, 6 } });
		System.out.println(result);
	}

	public static int solution(int[][] jobs) {
		int answer = 0;
		int count = 0;// 처리된 디스크
		int now = 0;// 작업이 끝난시간

		//요청시간 순으로 오름 차순 정렬
		Arrays.sort(jobs, ((o1, o2) -> o1[0] - o2[0]));

		// 처리 시간 오름 차순 정렬되는 우선 순위 큐
		PriorityQueue<int[]> queue = new PriorityQueue<>(((o1, o2) -> o1[1] - o2[1]));
		
		int i = 0;
		while (count < jobs.length) {
			
			// 하나의 작업이 완료될때까지 모든 요청을 큐에 넣음
			while (i < jobs.length && jobs[i][0] <= now) {
				queue.add(jobs[i++]);
			}

			// queue가 비어있을 경우는 작업 완료 이후
			if (queue.isEmpty()) {
				now = jobs[i][0];//다음 작업의 요청 시작 시작으로 맞춰줌
			} else { 
				//우선순위 큐에 의해서 수행 시간이 가장 짧은 처리 디스크 반환
				int[] tmp = queue.poll();
				answer += tmp[1] + now - tmp[0];
				now += tmp[1];
				count++;
			}
		}

		return answer / jobs.length;
	}

}
728x90

'[개발관련] > 코테준비' 카테고리의 다른 글

[프로그래머스] 여행경로  (0) 2021.09.22
[프로그래머스] 네트워크  (0) 2021.08.07
[프로그래머스] 체육북  (0) 2021.08.07
[백준] 최소 신장 트리  (0) 2021.08.07
[백준] 소문난 칠공주  (0) 2021.08.07
반응형
package com.ji.main;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 여행 경로
 * 
 * @author ji
 *
 */
public class TravelPath {

	public static void main(String[] args) {

//		String[] result1 = solution(new String[][] { { "ICN", "JFK" }, { "HND", "IAD" }, { "JFK", "HND" } });
//		for (String res : result1)
//			System.out.print(res + " ");
//		System.out.println();
		String[] result2 = solution(new String[][] { { "ICN", "SFO" }, { "ICN", "ATL" }, { "SFO", "ATL" },
				{ "ATL", "ICN" }, { "ATL", "SFO" } });
//		for (String res : result2)
//			System.out.print(res + " ");
	}

	static boolean visit[];
	static List<String> list = new ArrayList<>();
	static String route = "";

	public static String[] solution(String[][] tickets) {
		String[] answer = {};

		visit = new boolean[tickets.length];

		for (int i = 0; i < tickets.length; i++) {
			// 반복
			String departure = tickets[i][0];
			String destination = tickets[i][1];

			if (departure.equals("ICN")) {
				visit[i] = true; // tickets[i][0]이 기준
				route = departure + ","; // ICN
				dfs(tickets, destination, 1);
				visit[i] = false; // 다시 경로를 찾으려고
			}
		}
		
		// 다음 모든 경우에 수가 나옴
		//ICN,ATL,ICN,SFO,ATL,SFO,
		//ICN,ATL,SFO,ATL,ICN,SFO,
		//ICN,SFO,ATL,ICN,ATL,SFO,
		Collections.sort(list);
		answer = list.get(0).split(",");

		return answer;
	}

	static void dfs(String[][] tickets, String end, int count) {

		//다음 티켓 정보가 append 됨
		route += end + ",";

		if (count == tickets.length) {
			list.add(route);
			return;
		}

		for (int i = 0; i < tickets.length; i++) {
			String depart = tickets[i][0];
			String desti = tickets[i][1];

			//ICN,ATL,ICN,SFO,ATL,SFO,
			//ICN,ATL,SFO,ATL,ICN,SFO, 
			//백트래킹으로 통해서 다음 2가지 경우 모두 찾음!!!
			// 출발-도착 -> 출발-도착 로 이어진거 찾으려고
			if (end.equals(depart) && !visit[i]) {
				visit[i] = true;
				dfs(tickets, desti, count + 1);
				visit[i] = false; // 다시 찾으려고
				// 기존에 경로를 하나씩 지우면서 다시 검색
				route = route.substring(0, route.length() - 4); 
			}
		}
	}

}
728x90

'[개발관련] > 코테준비' 카테고리의 다른 글

[프로그래머스] 디스크컨트롤러  (0) 2021.09.22
[프로그래머스] 네트워크  (0) 2021.08.07
[프로그래머스] 체육북  (0) 2021.08.07
[백준] 최소 신장 트리  (0) 2021.08.07
[백준] 소문난 칠공주  (0) 2021.08.07
반응형

https://programmers.co.kr/learn/courses/30/lessons/43162

 

코딩테스트 연습 - 네트워크

네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있

programmers.co.kr

package com.ji.study;

public class Network {
	
	public static void main(String[] args) {
		int n = 3;
		int[][] com = {{1,1,0},{1,1,1},{0,1,1}};
		System.out.println(solution(n, com));
	}

	public static int solution(int n, int[][] computers) {
		int answer = 0;
		
		// computers.length => 3
		boolean[] visited = new boolean[computers.length];
		
		for(int i=0; i<computers.length; i++) {
				if(visited[i] == false) {
					answer++;
					dfs(i,visited,computers);
				}
				
		}
		
		return answer;
	}
	
	static void dfs(int node, boolean[] visited, int[][] computers) {
		visited[node] = true;
		
		for(int i=0; i< computers.length; i++) {
			if(visited[i] == false && computers[node][i] == 1)
				dfs(i, visited, computers);
		}
	}

}
728x90

'[개발관련] > 코테준비' 카테고리의 다른 글

[프로그래머스] 디스크컨트롤러  (0) 2021.09.22
[프로그래머스] 여행경로  (0) 2021.09.22
[프로그래머스] 체육북  (0) 2021.08.07
[백준] 최소 신장 트리  (0) 2021.08.07
[백준] 소문난 칠공주  (0) 2021.08.07

+ Recent posts