๐ ์๋ด์์ฝ์
๐ ๋ฌธ์


๐ซ ์ ํ ์ฌํญ

๐ ์ ์ถ๋ ฅ ์

๐ค ํ์ด ๋ฐฉ๋ฒ
์ด๋ฆ๊ณผ ์๊ฐ์ ๋น๊ตํ ๋๋ง๋ค ๋ฐฐ์ด์์ ๊ณจ๋ผ์ค๋ ๊ฒ์ ๋จธ๋ฆฌ ์ํ๋ค. Customer class ๋ฅผ ์์ฑํ์ฌ ๊ฐ ์ ๋ณด๋ฅผ ๊น๋ํ๊ฒ ์ ๋ฆฌํ์ฌ Queue ์ ๋ฃ๋๋กํ๋ฉด ๋๋ค. ์ด๋ ํ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์ ๋ฌด๊ฐ ์ฒ๋ฆฌ๋๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํด์ผํ๋๋ฐ ํ๊ฐ ๊ฐํธํ๊ฒ ๋นผ๊ณ ๋งจ ์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์ค๋๋ฐ ํธ๋ฆฌํ๋ค.
1๏ธโฃ Customer class ์์ฑ (์ด๋ด ๋ ๊ฐ์ฒด๋ฅผ ์ฐ๋๊ตฌ๋ ํ๋ค..!)
class Customer {
final String name;
final int arrivedTime;
Customer (String name, String arrivedTime) {
this.name = name;
this.arrivedTime = parseTime(arrivedTime);
}
private int parseTime(String time) {
String[] times = time.split(":");
return Integer.parseInt(times[0]) * 60 + Integer.parseInt(times[1]);
}
}
์ด๋ ๊ฒ ๊ฐ์ฒด๋ฅผ ์ ๋ฆฌํด์ ํ์ ๋ฃ๊ธฐ๋ง ํ๋ฉด ๊ทธ๋ค์์ ์ฐ์ ์์์ ๋ฐ๋ผ answer ๋ฐฐ์ด์ ์ด๋ฆ์ ๋ฃ๊ธฐ๋ง ํ๋ฉด๋๋ค.
2๏ธโฃ ์ฐ์ ์์ ์ ๋ฆฌ
โ ํ์ฌ ์๊ฐ์ด ์์ฝ ์๊ฐ๋ณด๋ค ๋ค ์ธ ๊ฒฝ์ฐ
1. ์์ฝ ์๋
2. ๋น์์ฝ ์๋
โก๏ธ ์ดํ ์๊ฐ์ ํ์ฌ ์๊ฐ์ +10 ์ผ๋ก ์์
โก ํ์ฌ ์๊ฐ์ด ์์ฝ ์๊ฐ ์ ์ธ ๊ฒฝ์ฐ
์์ฝ & ๋น์์ฝ ์๋ ์ค ๋จผ์ ์ธ ์๋
โก๏ธ ์ดํ ์๊ฐ์ ์์ฝ ์๊ฐ + 10 ์ผ๋ก ์์
๐ป ํ์ด ์ฝ๋
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class ์๋ด์์ฝ์ {
public static void main(String[] args) {
// Given
String[][] booked = {{"09:55", "hae"}, {"10:05", "jee"}};
String[][] unbooked = {{"10:04", "hee"}, {"14:07", "eom"}};
// ์ฃผ์ด์ง ๋ฐฐ์ด์ Custom ๊ฐ์ฒด๋ก ๋ฐ๊ฟ์ Queue ์ ๋ฃ๋ ๊ณผ์
Queue<Customer> bookedCustomers = new LinkedList<>();
for (String[] customer : booked) {
bookedCustomers.add(new Customer(customer[1], customer[0]));
}
Queue<Customer> unbookedCustomers = new LinkedList<>();
for (String[] customer : unbooked) {
unbookedCustomers.add(new Customer(customer[1], customer[0]));
}
// ํ์ด ์์
List<String> answer = new ArrayList<>();
// ์์ ์๊ฐ
int currentTime = Math.min(bookedCustomers.peek().arrivedTime, unbookedCustomers.peek().arrivedTime);
while (!bookedCustomers.isEmpty() || !unbookedCustomers.isEmpty()) {
// ๋ Queue ๊ฐ ๋ชจ๋ ๋น์์ง ๋ ๊น์ง ๋ฐ๋ณต
if (bookedCustomers.isEmpty()) {
// ์์ฝ๋ ๊ณ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ์์ฝ๋์ง ์์ ๊ณ ๊ฐ์ ๋ชจ๋ ์ถ๊ฐํ๊ณ ์ข
๋ฃ
for (Customer c : unbookedCustomers) answer.add(c.name);
break;
}
if (unbookedCustomers.isEmpty()) {
// ์์ฝ๋์ง ์์ ๊ณ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ์์ฝ๋ ๊ณ ๊ฐ์ ๋ชจ๋ ์ถ๊ฐํ๊ณ ์ข
๋ฃ
for (Customer c : bookedCustomers) answer.add(c.name);
break;
}
Customer bookedCustomer = bookedCustomers.peek();
Customer unbookedCustomer = unbookedCustomers.peek();
if (currentTime >= bookedCustomer.arrivedTime) {
// ํ์ฌ์๊ฐ์ด ์์ฝ๋ ๊ณ ๊ฐ์ ๋์ฐฉ์๊ฐ ์ดํํ๋ฉด ์์ฝ ๊ณ ๊ฐ์ ๋ฐ๋ก ์๋ด
answer.add(bookedCustomers.poll().name);
currentTime += 10; // ๋ค์ ํ๊ฐ์๊ฐ์ ์๋ด์ด ์ข
๋ฃ๋๋ 10๋ถ ํ
} else if (currentTime >= unbookedCustomer.arrivedTime) {
// ํ์ฌ์๊ฐ์ด ์์ฝ๋์ง ์์ ๊ณ ๊ฐ์ ๋์ฐฉ์๊ฐ ์ดํํ๋ฉด ๋น์์ฝ ๊ณ ๊ฐ์ ๋ฐ๋ก ์๋ด
answer.add(unbookedCustomers.poll().name);
currentTime += 10; // ๋ค์ ํ๊ฐ์๊ฐ์ ์๋ด์ด ์ข
๋ฃ๋๋ 10๋ถ ํ
} else {
Customer c;
// ์์ฝ/๋น์์ฝ ๊ณ ๊ฐ ์ค ๋จผ์ ์จ ๊ณ ๊ฐ์ ์๋ดํ๊ณ
if (bookedCustomer.arrivedTime < unbookedCustomer.arrivedTime) {
c = bookedCustomers.poll();
} else {
c = unbookedCustomers.poll();
}
answer.add(c.name);
// ๋ค์ ํ๊ฐ์๊ฐ์ ๊ณ ๊ฐ์ ์๋ด์ด ์ข
๋ฃ๋๋ ๋์ฐฉ์๊ฐ์ 10๋ถ ํ
currentTime = c.arrivedTime + 10;
}
}
for (String str : answer) {
System.out.println(str);
}
}
}
class Customer {
final String name;
final int arrivedTime;
Customer (String name, String arrivedTime) {
this.name = name;
this.arrivedTime = parseTime(arrivedTime);
}
private int parseTime(String time) {
String[] times = time.split(":");
return Integer.parseInt(times[0]) * 60 + Integer.parseInt(times[1]);
}
}
๐ ๋ฐฐ์ด ์
Class ์ ์ ์ ํ ์ฌ์ฉ์ ๋ํด ๋ฐฐ์ธ ์ ์์๋ค.
'Coding Test ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Programmers] Level 2 Java ๋ฌธ์ ํ์ด (1) (0) | 2022.11.08 |
|---|---|
| [Programmers] Level 1 Java ๋ฌธ์ ํ์ด (2) (0) | 2022.10.31 |
| [Programmers] Level 1 Java ๋ฌธ์ ํ์ด (1) (0) | 2022.10.29 |
| [๐ย ๋ฐฑ์ค] ๋ธ๋ก ์ฆ2 / 25305 / ์ปคํธ๋ผ์ธ (0) | 2022.10.21 |
| [๐ ๋ฐฑ์ค] ์ค๋ฒ1 / 11729 / ํ๋ ธ์ด ํ ์ด๋ ์์ (0) | 2022.10.17 |