Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 자바
- 백준
- 약수 구하기
- dfs
- 지능형 기차2
- 최단경로
- 순열
- hilt
- 오르막수
- 순수함수
- Android
- 2501
- 조합
- val
- 스카이라인 쉬운거
- 백준 14501
- Parcelize
- BFS
- imeOptions
- Kotlin
- 백준 퇴사
- 시뮬레이션
- SWEA
- BuildConfig
- EditText
- 프로그래머스
- Parcelable
- EditorInfo
- java
- 완전탐색
Archives
- Today
- Total
안드 공부를 해볼까?
[Java] 백준 기차가 어둠을 헤치고 은하수를 본문
728x90
1. 문제분석
문제는 생각보다 간단하다. 각 명령어에 맞게 변경해주면 되고 구현만 하면 끝이다.
이 문제는 3, 4번을 구현할 때 비트마스킹으로 구현한다고 한다.
비트마스킹이 정말 뭔지 모르기 때문에 이 포스팅에서는 단순 for문으로 구현했다.
1번과 2번은 정말 쉽게 구현할 수 있으니 넘어가겠다.
3번 같은 경우는 승객이 한칸씩 밀리고 마지막에 20번째에 사람이 있다면 하차를 한다.
단순히 for문으로 arr[기차][자리] = arr[기차][전의 자리(자리 - 1)]해주면 끝이다.
4번은 승객을 한칸씩 앞으로 댕기고 1번째의 자리에 있다면 하차한다.
마찬가지로 arr[기차][자리] = arr[기차][앞자리 (자리 +1)]하면 된다.
그 다음 조건을 보자. 이미 존재하는 기차가 있다면 그 기차는 통과하지 못한다.
1번과 3번의 좌석이 똑같으므로 같은 기차로 포함된다. 즉, 3번은 통과하지 못한다.
나는 String으로 변환 후 HashSet에 넣어서 중복을 제거했다.
마지막에 HastSet의 크기를 반환하면 끝이다.
2. 구현
import java.io.*;
import java.nio.Buffer;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int trainCount = Integer.parseInt(st.nextToken());
int operation = Integer.parseInt(st.nextToken());
int[][] train = new int[trainCount + 1][21];
for (int i = 0; i < operation; i++) {
st = new StringTokenizer(br.readLine());
int currentOperation = Integer.parseInt(st.nextToken());
int trainPos, seatPos;
switch (currentOperation) {
case 1:
trainPos = Integer.parseInt(st.nextToken());
seatPos = Integer.parseInt(st.nextToken());
train[trainPos][seatPos] = 1;
break;
case 2:
trainPos = Integer.parseInt(st.nextToken());
seatPos = Integer.parseInt(st.nextToken());
train[trainPos][seatPos] = 0;
break;
case 3:
trainPos = Integer.parseInt(st.nextToken());
for (int j = 20; j >= 2; j--) {
train[trainPos][j] = train[trainPos][j - 1];
}
train[trainPos][1] = 0;
break;
case 4:
trainPos = Integer.parseInt(st.nextToken());
for (int j = 1; j <= 19; j++) {
train[trainPos][j] = train[trainPos][j + 1];
}
train[trainPos][20] = 0;
break;
}
}
HashSet<String> set = new HashSet<>();
for (int j = 1; j <= trainCount; j++) {
String temp = "";
for (int k = 1; k <= 20; k++) {
temp += train[j][k];
}
set.add(temp);
}
System.out.println(set.size());
}
}
정말 위에서 말한거 처럼 구현하면 끝이다.
구현 문제가 정말 간단하지만 생각하는데 어려움이 있다.
3. 마무리
구.현.문.제.조.아
실버 2문제라는데 생각보다 쉬웠다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[Java] 백준 스위치 켜고 끄기 (0) | 2022.08.20 |
---|---|
[Java] 백준 직사각형 네개의 합집합의 면적 구하기 (0) | 2022.08.20 |
[Java] 백준 귀여운 라이언 (0) | 2022.08.16 |
[Java] 백준 배열 돌리기 (0) | 2022.08.16 |
[Java] 백준 달력 (0) | 2022.08.16 |
Comments