문제 링크
주의사항
- JAVA를 사용하여 프로그램을 사용하였습니다.
- 백준에서 코드를 작성하였을 때 아래 형태에서 Main에서 결과가 출력되어야 합니다.
public class Main{
public static void main(String[] args){
}
}
문제 설명
접근 방법
브루트 포스란.
모든 경우의 수를 대입시켜서 가장 알맞은 경우의 수를 결과로 출력하는 것입니다.
이 문제에 핵심은
1. 1~20까지 들어가는 집합이 존재한다.
2. 집합에는 1~20의 숫자가 존재하거나 존재하지 않을 수 있다.
3. 존재 유무에 따른 배열을 만들어 해결한다.(boolean 형)
배열
aggregate : 1~20의 숫자가 존재하는지 확인
입력값에 명령에 따라 aggregate의 배열을 변화시켜주었습니다.
명령어
add x
해당 x의 값을 존재하는 형태로 바꾸어야 하기 때문에 aggregate[x] = true로 바꾸어줍니다.
remove x
해당 x의 값이 존재하지 않아야 하기 때문에 aggregate[x] = false로 바꾸어줍니다.
check x
해당 x가 존재(true)이면 1, 존재하지 않으면(false) 0을 출력한다.(aggregate[x]의 값을 확인!)
toggle x
해당 x가 존재 유무에 따라 반대로 바꾸기 때문에 aggregate[x] = !aggregate[x]로 바꾸어줍니다.
all
1~20의 모든 숫자가 존재하기 때문에 Arrays.fill(aggregate, true)를 해주었습니다.
empty
1~20의 모든 숫자가 존재하지 않기 때문에 Arrays.fill(aggregate, false)를 해주었습니다.
※Arrays.fill(배열, 채울 값)의 형태의 명령어로 배열의 값을 채울 때 사용합니다.
문제에 해결알고리즘은
1. 명령어를 M개 받습니다.
2. 위에 내용대로 명령어를 처리해줍니다.
- BufferedReader를 사용하여 입력 값을 저장하였습니다.
- StringTokenizer를 통해 명령어를 저장하였습니다.
- 명령어 설명 내용 그대로 알고리즘을 구현하였습니다.
- BufferedWriter에 명령어 실행되면서 출력되는 0과 1을 저장하였습니다.
- BufferedWriter에 저장된 값을 출력하였습니다.
결과 코드
import java.io.*;
import java.util.*;
public class Main{
public static int M; //명령어 개수
public static boolean[] aggregate = new boolean[21]; //1~20 숫자 존재 여부
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//입력값 처리하는 BufferedReader
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//결과값 출력하는 BufferedWriter
StringTokenizer st;
M = Integer.parseInt(br.readLine());
for(int i=0;i<M;i++) { //명령어 M개만큼 받기
st = new StringTokenizer(br.readLine()," ");
String command = st.nextToken();
if(command.equals("all")) //"all"입력시
Arrays.fill(aggregate, true);
else if(command.equals("empty")) //"empty"입력시
Arrays.fill(aggregate, false);
else {
int value = Integer.parseInt(st.nextToken());
if(command.equals("add")) //"add x"입력시
aggregate[value] = true;
else if(command.equals("remove")) //"remove x"입력시
aggregate[value] = false;
else if(command.equals("check")) { //"check"입력시
if(aggregate[value])
bw.write("1\n");
else
bw.write("0\n");
}else //"toggle"입력시
aggregate[value] = !aggregate[value];
}
}
bw.flush(); //결과 출력
bw.close();
br.close();
}
}
'백준' 카테고리의 다른 글
[백준] 단계별로 풀어보기(단계:24, DFS와BFS,JAVA)7562번, 나이트의 이동 (0) | 2022.03.30 |
---|---|
[백준] code.plus(브루트포스-비트마스크,JAVA)1182번, 부분수열의 합 (0) | 2022.03.30 |
[백준] 단계별로 풀어보기(단계:24, DFS와BFS,JAVA)2206번, 벽 부수고 이동하기 (0) | 2022.03.27 |
[백준] code.plus(브루트포스-순열,JAVA)6603번, 로또 (0) | 2022.03.27 |
[백준] 단계별로 풀어보기(단계:24, DFS와BFS,JAVA)1697번, 숨바꼭질 (0) | 2022.03.26 |
댓글