Skip to content

Commit 622875c

Browse files
committed
[Silver II] Title: 기차가 어둠을 헤치고 은하수를, Time: 596 ms, Memory: 82172 KB -BaekjoonHub
1 parent a1069ab commit 622875c

2 files changed

Lines changed: 89 additions & 37 deletions

File tree

백준/Silver/15787. 기차가 어둠을 헤치고 은하수를/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44

55
### 성능 요약
66

7-
메모리: 75440 KB, 시간: 600 ms
7+
메모리: 82172 KB, 시간: 596 ms
88

99
### 분류
1010

1111
비트마스킹, 구현
1212

1313
### 제출 일자
1414

15-
2025년 1월 24일 15:33:43
15+
2025년 1월 24일 15:44:30
1616

1717
### 문제 설명
1818

백준/Silver/15787. 기차가 어둠을 헤치고 은하수를/기차가 어둠을 헤치고 은하수를.java

Lines changed: 87 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10,54 +10,106 @@ public static void main(String[] args) throws IOException {
1010
int N = Integer.parseInt(split[0]);
1111
int M = Integer.parseInt(split[1]);
1212

13-
// 기차 배열 초기화
14-
int[][] arr = new int[N + 1][21];
13+
/*
14+
* 기차에 사람이 타있으면 1, 없으면 0
15+
* */
1516

16-
// 명령 처리
17-
for (int i = 0; i < M; i++) {
18-
String[] line = reader.readLine().split(" ");
19-
int train = Integer.parseInt(line[1]);
17+
int[][] arr = new int[N+1][21];
2018

21-
switch (line[0]) {
22-
case "1": // 승차
23-
int seatToBoard = Integer.parseInt(line[2]);
24-
arr[train][seatToBoard] = 1;
19+
for(int i=0; i<M; i++){ //M개의 명령 실행
20+
String[] line = reader.readLine().split(" ");
21+
int train_i = Integer.parseInt(line[1]);
22+
// System.out.println(line[0]);
23+
switch (line[0]){
24+
case "1" :
25+
first(arr, train_i, Integer.parseInt(line[2]));
2526
break;
26-
case "2": // 하차
27-
int seatToLeave = Integer.parseInt(line[2]);
28-
arr[train][seatToLeave] = 0;
27+
case "2" :
28+
second(arr, train_i, Integer.parseInt(line[2]));
2929
break;
30-
case "3": // 뒤로 이동
31-
for (int j = 20; j > 1; j--) { // 20번 칸까지 뒤로 이동
32-
arr[train][j] = arr[train][j - 1];
33-
}
34-
arr[train][1] = 0; // 1번 좌석은 빈 상태
30+
case "3" :
31+
third(arr, train_i);
3532
break;
36-
case "4": // 앞으로 이동
37-
for (int j = 1; j < 20; j++) { // 1번 칸부터 앞으로 이동
38-
arr[train][j] = arr[train][j + 1];
39-
}
40-
arr[train][20] = 0; // 20번 좌석은 빈 상태
33+
case "4" :
34+
fourth(arr, train_i);
4135
break;
4236
default:
43-
// 잘못된 명령어는 무시
4437
break;
4538
}
4639
}
4740

48-
// 중복된 상태 제거
41+
// for(int[] array : arr){
42+
// for(int num : array){
43+
// System.out.print(num + " ");
44+
// }
45+
// System.out.println();
46+
// }
47+
4948
HashSet<String> set = new HashSet<>();
50-
for (int i = 1; i <= N; i++) {
51-
StringBuilder sb = new StringBuilder();
52-
for (int j = 1; j <= 20; j++) { // 좌석 상태만 문자열로 변환
53-
sb.append(arr[i][j]);
54-
}
55-
set.add(sb.toString()); // 중복된 배열 상태 제거
49+
//배열들을 map에 넣는다면?
50+
// for(int i=1; i<N+1; i++){
51+
// set.add(arr[i]);
52+
// }
53+
54+
// for(int[] array : arr){
55+
// String s = Arrays.toString(array);
56+
// set.add(s);
57+
// }
58+
59+
// for (int i = 1; i <= N; i++) { // i = 1부터 시작
60+
// for(int j=1; j<21; j++){
61+
// System.out.print(arr[i][j] + " ");
62+
// }
63+
// System.out.println();
64+
// }
65+
66+
for (int i = 1; i <= N; i++) { // i = 1부터 시작
67+
String s = Arrays.toString(arr[i]);
68+
set.add(s);
5669
}
5770

58-
// 결과 출력
59-
writer.write(set.size() + "\n");
60-
writer.flush();
61-
writer.close();
71+
System.out.println(set.size());
72+
73+
}
74+
75+
public static void first(int[][] arr, int i, int x){ //해당 칸 승차
76+
// System.out.println("test1");
77+
78+
// if(arr[i][x] == 0){
79+
arr[i][x] = 1;
80+
// }
81+
}
82+
83+
public static void second(int[][] arr, int i, int x){ //해당 칸 하차
84+
// System.out.println("test2");
85+
86+
// if(arr[i][x] == 1){
87+
arr[i][x] = 0;
88+
// }
89+
}
90+
91+
public static void third(int[][] arr, int i){ //한칸 씩 뒤로 이동
92+
// System.out.println("test3");
93+
for(int j=20; j>1; j--){
94+
arr[i][j] = arr[i][j-1];
95+
// if(arr[i][j] == 1){ // 해당 좌석에 사람이 있는 경우에만
96+
// arr[i][j+1] = 1; // 뒤로 좌석 옮기기
97+
// arr[i][j] = 0;
98+
// }
99+
}
100+
arr[i][1] = 0;
101+
}
102+
103+
public static void fourth(int[][] arr, int i){ //한칸 씩 앞으로 이동
104+
// System.out.println("test4");
105+
106+
for(int j=1; j<20; j++){
107+
arr[i][j] = arr[i][j+1];
108+
// if(arr[i][j] == 1){ // 해당 좌석에 사람이 있는 경우에만
109+
// arr[i][j-1] = 1; //앞으로 좌석 옮기기
110+
// arr[i][j] = 0;
111+
// }
112+
}
113+
arr[i][20] = 0;
62114
}
63115
}

0 commit comments

Comments
 (0)