삐까냥의 파도타기
2383. 점심 식사시간 본문
2383. 점심 식사시간
하루종일 문제만 풀다보니,
너무나 풀기 싫었던 문제입니다.
근데 생각보다 어려웠다고 해야하나...?
근데 정답률은 47퍼.
정말 정말 풀기 싫어서
코드도 원래 스타일대로 안짰어요.
제가 봐도 개판 코드 입니다.
이 문제 만큼은 다른 사이트에서 보세요;;
2018년 4월 13일 - 다듬지 않은 코드 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Q2383 { static int mapSize, result; static LinkedList<person> peoples; static int[][] exit = new int[2][3];
public static void main(String[] args) { Scanner sc = new Scanner(System.in); int testCase = sc.nextInt();
for (int i = 1; i <= testCase; i++) { peoples = new LinkedList<person>(); mapSize = sc.nextInt(); boolean isFirst = true; for (int j = 0; j < mapSize; j++) { for (int k = 0; k < mapSize; k++) { int value = sc.nextInt(); if (value == 1) { peoples.add(new person(j, k)); } else if (value > 1) { if (isFirst) { exit[0][0] = j; exit[0][1] = k; exit[0][2] = value; isFirst = false; } else { exit[1][0] = j; exit[1][1] = k; exit[1][2] = value; } } } } result = -1; divPeople(0); System.out.println("#" + i + " " + result); } }
static LinkedList<person> first = new LinkedList<person>(); static LinkedList<person> second = new LinkedList<person>();
static void divPeople(int num) {
if (num < peoples.size()) { person temp = peoples.get(num); first.add(temp); divPeople(num+1); first.remove(temp);
second.add(temp); divPeople(num+1); second.remove(temp); } else { LinkedList<person> tempFirst = (LinkedList<person>) first.clone(); LinkedList<person> tempSecond = (LinkedList<person>) second.clone();
// System.out.println("서치 " + tempFirst.size() + " / " + tempSecond.size()); for (int i = 0; i < tempFirst.size(); i++) { tempFirst.get(i).setArrivalTime(exit[0][0], exit[0][1]); }
for (int i = 0; i < tempSecond.size(); i++) { tempSecond.get(i).setArrivalTime(exit[1][0], exit[1][1]); }
int time = 0; int firstStartPeople = 0; int secondStartPeople = 0; while(!tempFirst.isEmpty() || !tempSecond.isEmpty()) { time += 1; // System.out.println(time + " " + first.size() + " " + second.size());
for (int i = 0; i < tempFirst.size(); i++) { person temp = tempFirst.get(i);
//끝났음 if (temp.finishTime == time) { tempFirst.remove(temp); firstStartPeople -= 1; i -= 1; } }
for (int i = 0; i < tempFirst.size(); i++) { if (firstStartPeople == 3) { break; } person temp = tempFirst.get(i); //내려가기 시작 if (firstStartPeople < 3 && -1 == temp.finishTime && temp.tempStartTime <= time) { temp.finishTime = time+exit[0][2]; firstStartPeople += 1; } }
for (int i = 0; i < tempSecond.size(); i++) { person temp = tempSecond.get(i);
if (temp.finishTime == time) { tempSecond.remove(temp); secondStartPeople -= 1; i -= 1; } }
for (int i = 0; i < tempSecond.size(); i++) { if (secondStartPeople == 3) { break; } person temp = tempSecond.get(i); //내려가기 시작 if (secondStartPeople < 3 && -1 == temp.finishTime && temp.tempStartTime <= time) { temp.finishTime = time+exit[1][2]; secondStartPeople += 1; } } }
if (result == -1 || result > time) { result = time; } } } } class person { int y, x; int tempStartTime = -1; int finishTime = -1;
public person(int y, int x) { this.y = y; this.x = x; }
public int getY() { return y; }
public int getX() { return x; }
public void setArrivalTime(int exitY, int exitX) { int temp1 = y - exitY; if (temp1 < 0) { temp1 *= -1; }
int temp2 = x - exitX; if (temp2 < 0) { temp2 *= -1; }
tempStartTime = temp1 + temp2+1; finishTime = -1; } } |
'코딩 > SW Expert Academy' 카테고리의 다른 글
1953. 탈주범 검거 (0) | 2018.04.15 |
---|---|
2115. 벌꿀채취 (0) | 2018.04.14 |
2382. 미생물 격리 (0) | 2018.04.13 |
1949. 등산로 조성 (0) | 2018.04.13 |
1767. 프로세서 연결하기 (0) | 2018.04.12 |