https://softeer.ai/practice/info.do?idx=1&eid=626&sw_prbl_sbms_sn=178347
Softeer
์ฐ์ต๋ฌธ์ ๋ฅผ ๋ด์ Set์ ์ ํํด์ฃผ์ธ์. ์ทจ์ ํ์ธ
softeer.ai
1. ๋ฌธ์
N๊ฐ์ ํ์์ค, M๊ฐ์ ์์ฝํํฉ์ด ์ฃผ์ด์ง๊ณ ํ์์ค๋ง๋ค ์์ฝ์ด ์ฐจ์ง ์์ ์๊ฐ๋์ ๊ฐ์์ ์๊ฐ๋๋ฅผ ์ถ๋ ฅํ๋ค.
2. ํ์ด
TreeMap, StringBuilder, ์ด์ฐจ์๋ฐฐ์ด์ ์ฌ์ฉํ ๊ตฌํ ๋ฌธ์ ๋ค.
TreeMap
- ์ด์ ์๋ HashMap์ ์ฌ์ฉํ๋๋ฐ ๋งค๋ฒ pq์๋ ๊ฐ์ด ๋ฃ์ด์ ์ ๋ ฌํ ํ pollํ ๊ฐ์ HashMap์ key๋ก ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ค๋ฆ์ฐจ์์ ๊ตฌํํ๋ค. ํ์ง๋ง ํจ์ฌ ์ ์ฉํ๊ฒ ์ฐ์ด๋ ์๋ฃ๊ตฌ์กฐ TreeMap์ด๋๊ฑธ ์๊ฒ๋์๋ค.
- TreeMap์ key๊ฐ์ ์๋์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ค๋ค. ๋ฐ๋ผ์ HashMap๋ณด๋ค๋ ์ฑ๋ฅ์ด ์์ข์ง๋ง ์ง๊ธ ๊ฐ์ ๋งค๋ฒ key๊ฐ ์ ๋ ฌ์ด ํ์ํ ๊ฒฝ์ฐ์ ํจ์จ์ ์ด๋ค.
- ๊ทธ๋ฆฌ๊ณ ๊ธฐ์กด์ HashMap๊ณผ String์์ TreeMap๊ณผ StringBuilder๋ก ๋ฐ๊พธ๋ ์คํ์๊ฐ์ด 3๋ฐฐ๊ฐ ์ค์๋ค.
- Map์ ํํ๊ฐ <String, int[][]> ํํ์ธ๋ฐ, value๊ฐ์ ๋ฐ๋ก int[][] tmp ์ ๋ฃ์ด์ ๊ทธ tmp์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ๋ณต์ฌ๋ ๋ฐฐ์ด์ด ๋ณ๊ฒฝ๋๋๊ฒ ๋ง๋ค.
StringBuilder
- StringBuilder๋ ์ ์๋ฅผ appendํด๋ ๋ฌธ์์ด๋ก ๋ฐ๊ฟ์ฃผ๋๊ฐ? => O
- append๊ฐ String์ + ์ฐ์ฐ๋ณด๋ค ๋น ๋ฅธ๊ฐ? => "์ฐ์ฐ ์๋๋ ๋น์ทํ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์ฝ๋๋ค."
์ด๊ฒ ๋ฌด์จ ๋ง์ด๋๋ฉด
1. + ์ฐ์ฐ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ์กฐํฉํ ๋๋ง๋ค ์๋ก์ด String ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ์ด ๊ฐ์ฒด๋ GC์ ์๊ฑฐ ๋์์ด ๋๋ค.
- +๋ก String๊ฐ์ฒด 100๊ฐ ์ด์ด๋ถ์ด๋ฉด ๋ฉ๋ชจ๋ฆฌ 100๊ฐ๊ฐ ๋ญ๋น๋๋ ์ .
- ์ฆ, +์ฐ์ฐ์ด ๋ง์์ง ์๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ญ๋น๋๊ณ , ์ด๋ก ์ธํด ๊ฐ๋น์ง ์ฝ๋ ์ ์ด ์์ฃผ ๋ฐ์ํ์ฌ ์ฑ๋ฅ ์ ํ๋ฅผ ์ ๋ฐํ๋ค.
(+์ฐ์ฐ์ถ๊ฐ -> ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น -> GC์์ฃผ๋ฐ์ -> ์ฑ๋ฅ์ ํ)
2. StringBuilder๋ ํด๋์ค๋ค. append๋ก ๋ฌธ์์ด์ ์กฐํฉํ ๋ String ๊ฐ์ฒด๋ฅผ ์๋ก ์์ฑํ์ง ์์ผ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ ์ ์๋ค.
- +์ฐ์ฐ๋ณด๋ค๋ StringBuilder๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ์
์ด์ฐจ์๋ฐฐ์ด
- ๊ธฐ์กด์๋ ์ผ์ฐจ์๋ฐฐ์ด์ ๋ง๋ค์ด์ boolean[] time ์ด๋ฐ์์ผ๋ก ์์ฝ์ด์ฐผ์ผ๋ฉด true ๋ฅผ ๋ฃ์ด์ฃผ์๋๋ฐ ์ด๋ ๊ฒ ํ๋ฉด ์ด์ํ๊ฒ 30์ ์ผ๋ก ์ฑ์ ๋๋ค..
- tmp[9][2]๋ก ์์ฑํ์ฌ ์๊ฐ๋๋ง๋ค [0]์ ์ค์ ์์์๊ฐ(idx+9์๊ฐ), [1]์ ์ค์ ์ข ๋ฃ์๊ฐ(idx+9์๊ฐ)์ ๋ฃ์ด์คฌ๋ค.
3. ์ฝ๋
import java.util.*;
import java.io.*;
public class Main
{
static int N,M;
static Map<String, int[][]> reservation = new TreeMap<> ();
public static void main(String args[]) throws Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
for (int i=0; i<N; i++) {
int[][] tmp = new int[9][2];
for (int j= 0; j<9; j++) {
tmp[j][0] = j+9; //์์์๊ฐ
tmp[j][1] = j+9+1; //๋์๊ฐ
}
reservation.put(br.readLine(), tmp);
}
for (int j=0; j<M; j++) {
st = new StringTokenizer(br.readLine());
String name = st.nextToken();
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
int[][] checked = reservation.get(name); //๋ณต์ฌ๊ฐ ์๋. ์์ ํ๋ฉด ์๋ณธ์ด ์์ ๋๋ค?
for (int t = start; t<end; t++) {
checked[t-9][0] = -1; //์์ฝ์๋ฃ
checked[t-9][1] = -1; //์์ฝ์๋ฃ
}
} //์
๋ ฅ ๋
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, int[][]> entry : reservation.entrySet()) {
sb.append("Room ").append(entry.getKey()).append(":").append("\n");
StringBuilder tmpSb = new StringBuilder();
int[][] checked = entry.getValue();
int cnt = 0;
int start = -1;
int end = -1;
for (int i = 0; i<9; i++) {
if (checked[i][0] != -1) {
if (start == -1) {
start = checked[i][0];
}
} else {
if (start != -1) {
end = checked[i-1][1];
}
}
if (start != -1 && end != -1) {
tmpSb.append(start==9?"09":start).append("-").append(end).append("\n");
start = -1;
end = -1;
cnt++;
}
}
if (start != -1) {
cnt++;
tmpSb.append(start==9? "09":start).append("-").append(18).append("\n");
}
if (cnt == 0) {
sb.append("Not available").append("\n");
} else {
sb.append(cnt).append(" available:").append("\n");
sb.append(tmpSb);
}
sb.append("-----").append("\n");
}
sb.setLength(sb.length()-6); //๊ธธ์ด์กฐ์ ๋ก ๋ง์ง๋ง์ค -----\n์ ์๋ฅธ๋ค.
System.out.println(sb);
}
}
4. ์ฌ๋ด
๊พธ์คํ ํ์
TreeMap, StringBuilder ์ ์ฉํ๊ฒ ์ฌ์ฉํ ๋ฏํ๋ค.
'Algorithm > Softeer' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Softeer] ์ฑ์ ํ๊ท - Java (0) | 2023.05.06 |
---|---|
[Softeer] ์ฑ์ ํ๊ฐ - Java (2) | 2023.05.04 |
[Softeer] ๊ฐ์์ค ๋ฐฐ์ - Java (0) | 2023.04.29 |
[Softeer] GBC - Java (0) | 2023.04.29 |
[Softeer] [21๋ ์ฌ์ง์ ๋ํ ์์ ] ์ ๊ดํ - Java (0) | 2023.04.25 |