Set
문제 복기
추가, 삭제, 검사, 토글, 전체집합, 공집합 구하는 대부분 연산 구현은 성공했다.
틀린 부분
틀린 이유 : 입력 받을 때 아래와 같이 해버리면 all 이나 empty의 경우 명령어 단독으로 연산이 수행되기 때문에 명령어 길이가 1이다. 그런데 n에다 인덱스 1번째를 저장하려고 하니 당연히 인덱스 초과에러가 난다!
import java.util.*;
import java.io.*;
public class StackArray throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();//push 17
String[] line = str.split(" ");
String cmd = line[0];
int n = Integer.parseInt(line[1]);
}
명령어를 입력 받을 때 add, remove, check, toggle 만 뒤에 인자(숫자)를 받기 때문에 명령어(입력받은 0번째 스트링값)가 이 4가지인 경우에만 뒤에 숫자를 하나 더 입력받도록 처리해주면 된다!
그리고 0부터 n-1의 수를 저장하기 때문에 입력받은 수를 1빼서 저장한다!
if(cmd.equals("add")) {
int x = Integer.valueOf(line[1]) - 1;
s = (s | (1 << x));
} else if(cmd.equals("remove")) {
int x = Integer.valueOf(line[1]) - 1;
s = (s & ~(1<<n));
} else if(cmd.equals("check")) {
int x = Integer.valueOf(line[1]) - 1;
int res = (s & (1<<n));
if(res == 0) {sb.append("0\n");}
else {sb.append("1\n");}
} else if(cmd.equals("toggle")) {
int x = Integer.valueOf(line[1]) - 1;
s = (s ^ (1<<n));
}
입출력이 많은 경우
BufferedReader, BufferedWriter를 쓴다.
StringBuilder에 차곡차곡 쌓아서 마지막에 한번에 StringBuilder를 출력한다! =>check 명령어가 들어올 때만 출력하기 때문에 check 명령어 연산의 결과(1 또는 0)을 StringBuilder에 저장하고, 마지막에 한번에 출력한다!
Last updated
Was this helpful?