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));
			}

입출력이 많은 경우

  1. BufferedReader, BufferedWriter를 쓴다.

  2. StringBuilder에 차곡차곡 쌓아서 마지막에 한번에 StringBuilder를 출력한다! =>check 명령어가 들어올 때만 출력하기 때문에 check 명령어 연산의 결과(1 또는 0)을 StringBuilder에 저장하고, 마지막에 한번에 출력한다!

Last updated