의식의 흐름
일단 2차원 배열에 넣고 1,2,3,4에 따라서 나눠주고 중복되는지 확인하고..?
근데 중복을 하나하나 다 확인해야하나..? (헤매다가) HashSet 쓰면 되겠댱
풀이 과정
1. 기차의 수(N), 명령의 수(M)을 입력받는다.
2. 명령의 종류에 따라 배열(seats)에 사람 유무를 나타낸다.
타있는 경우 => seats[i][x] = true, 타고있지 않은 경우 => seats[i][x] = false;
- 1 i x : seat[i][x] = true;
- 2 i x : seat[i][x] = false;
- 3 i : setSeats(command, i);
- 4 i : setSeats(command, i);
public static void setSeats(int command, int i){
if(command == 3){
for(int j=20;j>1;j--){
seats[i][j] = seats[i][j-1];
}
seats[i][1] = false;
}
else if(command == 4){
for(int j=1;j<20;j++){
seats[i][j] = seats[i][j+1];
}
seats[i][20] = false;
}
}
3. 2번 과정 M만큼 반복한다.
4. 각 기차(seats[i])에 대해 사람 유무를 문자열로 만들어 HashSet(answers)에 저장한다.
(중복을 제거하기 위해 HashSet 사용)
5. answers.size()를 출력한다.
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashSet;
import java.util.StringTokenizer;
public class Main {
public static int N, M;
public static boolean[][] seats;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
seats = new boolean[N+1][21];
while(M-->0){
st = new StringTokenizer(br.readLine());
int command = Integer.parseInt(st.nextToken());
if(command == 1){
int i = Integer.parseInt(st.nextToken()); // 기차 번호
int x = Integer.parseInt(st.nextToken()); // 좌석 번호
seats[i][x] = true;
}
else if (command == 2) {
int i = Integer.parseInt(st.nextToken()); // 기차 번호
int x = Integer.parseInt(st.nextToken()); // 좌석 번호
seats[i][x] = false;
}
else {
int i = Integer.parseInt(st.nextToken()); // 기차 번호
setSeats(command, i);
}
}
HashSet<String> answers = new HashSet<>();
for(int i=1;i<=N;i++){
StringBuilder result = new StringBuilder();
for(int j=1;j<=20;j++){
if(seats[i][j]){
result.append("1");
}
else{
result.append("0");
}
}
answers.add(result.toString());
}
bw.write(Integer.toString(answers.size()));
bw.flush();
br.close();
bw.close();
}
public static void setSeats(int command, int i){
if(command == 3){
for(int j=20;j>1;j--){
seats[i][j] = seats[i][j-1];
}
seats[i][1] = false;
}
else if(command == 4){
for(int j=1;j<20;j++){
seats[i][j] = seats[i][j+1];
}
seats[i][20] = false;
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[골드IV] 백준 q6137 - 문자열 생성 (0) | 2024.01.21 |
---|---|
[JAVA] 백준 q17626 - Four Squares (2) | 2023.11.28 |
[JAVA] 백준 q21608 - 상어 초등학교 (2) | 2023.11.22 |
[JAVA] 백준 q16926 - 배열 돌리기 1 (0) | 2023.11.21 |
[JAVA] 백준 q22945 - 팀 빌딩 (2) | 2023.11.20 |