SkylineProblem.java move Others Directory and Refactoring other files

This commit is contained in:
sangjun2 2017-11-27 17:32:26 +09:00
parent b5f0c5d5c3
commit a8e0a4812d
5 changed files with 135 additions and 4 deletions

View File

@ -6,7 +6,7 @@ import java.util.*;
* @author Unknown * @author Unknown
* *
*/ */
public class bfs{ public class BFS{
/** /**
* The BFS implemented in code to use. * The BFS implemented in code to use.

View File

@ -7,7 +7,7 @@ import java.util.*;
* *
*/ */
public class dfs{ public class DFS{
/** /**
* Implementation in code of a DFS * Implementation in code of a DFS

View File

@ -100,7 +100,7 @@ class PrimMST
| / \ | | / \ |
(3)-------(4) (3)-------(4)
9 */ 9 */
MST t = new MST(); PrimMST t = new PrimMST();
int graph[][] = new int[][] {{0, 2, 0, 6, 0}, int graph[][] = new int[][] {{0, 2, 0, 6, 0},
{2, 0, 3, 8, 5}, {2, 0, 3, 8, 5},
{0, 3, 0, 0, 7}, {0, 3, 0, 0, 7},

View File

@ -6,7 +6,7 @@
* *
*/ */
public class Levenshtein_distance{ public class LevenshteinDistance{
private static int minimum(int a, int b, int c){ private static int minimum(int a, int b, int c){
if(a < b && a < c){ if(a < b && a < c){
return a; return a;

131
Others/SkylineProblem.java Normal file
View File

@ -0,0 +1,131 @@
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
public class SkylineProblem {
Building[] building;
int count;
public void run() {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
this.building = new Building[num];
for(int i = 0; i < num; i++) {
String input = sc.next();
String[] data = input.split(",");
this.add(Integer.parseInt(data[0]), Integer.parseInt(data[1]), Integer.parseInt(data[2]));
}
this.print(this.findSkyline(0, num - 1));
sc.close();
}
public void add(int left, int height, int right) {
building[count++] = new Building(left, height, right);
}
public void print(ArrayList<Skyline> skyline) {
Iterator<Skyline> it = skyline.iterator();
while(it.hasNext()) {
Skyline temp = it.next();
System.out.print(temp.coordinates + "," + temp.height);
if(it.hasNext()) {
System.out.print(",");
}
}
}
public ArrayList<Skyline> findSkyline(int start, int end) {
if(start == end) {
ArrayList<Skyline> list = new ArrayList<>();
list.add(new Skyline(building[start].left, building[start].height));
list.add(new Skyline(building[end].right, 0));
return list;
}
int mid = (start + end) / 2;
ArrayList<Skyline> sky1 = this.findSkyline(start, mid);
ArrayList<Skyline> sky2 = this.findSkyline(mid + 1, end);
return this.mergeSkyline(sky1, sky2);
}
public ArrayList<Skyline> mergeSkyline(ArrayList<Skyline> sky1, ArrayList<Skyline> sky2) {
int currentH1 = 0, currentH2 = 0;
ArrayList<Skyline> skyline = new ArrayList<>();
int maxH = 0;
while(!sky1.isEmpty() && !sky2.isEmpty()) {
if(sky1.get(0).coordinates < sky2.get(0).coordinates) {
int currentX = sky1.get(0).coordinates;
currentH1 = sky1.get(0).height;
if(currentH1 < currentH2) {
sky1.remove(0);
if(maxH != currentH2) skyline.add(new Skyline(currentX, currentH2));
} else {
maxH = currentH1;
sky1.remove(0);
skyline.add(new Skyline(currentX, currentH1));
}
} else {
int currentX = sky2.get(0).coordinates;
currentH2 = sky2.get(0).height;
if(currentH2 < currentH1) {
sky2.remove(0);
if(maxH != currentH1) skyline.add(new Skyline(currentX, currentH1));
} else {
maxH = currentH2;
sky2.remove(0);
skyline.add(new Skyline(currentX, currentH2));
}
}
}
while(!sky1.isEmpty()) {
skyline.add(sky1.get(0));
sky1.remove(0);
}
while(!sky2.isEmpty()) {
skyline.add(sky2.get(0));
sky2.remove(0);
}
return skyline;
}
public class Skyline {
public int coordinates;
public int height;
public Skyline(int coordinates, int height) {
this.coordinates = coordinates;
this.height = height;
}
}
public class Building {
public int left;
public int height;
public int right;
public Building(int left, int height, int right) {
this.left = left;
this.height = height;
this.right = right;
}
}
public static void main(String[] args) {
SkylineProblem skylineProblem = new SkylineProblem();
skylineProblem.run();
}
}