백준) 사용한 문법 정리

Bak·2024년 2월 6일
0

백준

목록 보기
1/4

BufferedReader - BufferedWriter

* Stream : 연속적으로 단방향으로 흘러가는 것
→ 데이터가 지나가는 통로
→ 단방향이기에 하나의 stream으로 입출력이 안된다.

  • java
    • OutputStream : 데이터를 보낼 때
    • InputStream : 데이터를 수신할 때

(1) BufferedReader : 텍스트를 버퍼링
→ 한번에 하나의 문자가 아니라 여러개의 문자를 한번에 읽어서 버퍼에 저장한다.
* 버퍼링 : data를 모아두었다가 한번에 전송하는 것.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

char[] input = (br.readLine()).toCharArray();
int input = Integer.parseInt(br.readLine());
  • InputStreamReader : 입력 스트림을 통해서 들어온 것을 byte를 문자열로 전환
  • System.in : terminal로 들어오는 사용자의 입력
  • br.readLine() : 입력에서 한 줄(\n)으로 끝나는 데이터를 읽는다.

(2) BufferedWriter : 텍스트를 버퍼링

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

bw.write(time + " ");
bw.flush();
bw.close();
  • bw.write() : 값을 출력한다.
    → 문자열을 같이 출력해주지 않으면 외계어가 출력되는 경우가 있다.
  • bw.flush : 버퍼에 남은 것을 모두 출력한다.
  • bw.close : BufferedWriter을 닫는다.

(3) 다른 Writer

  • 객체.getOutputStream() : 객체가 가지고 있는 OutputStream을 반환한다.
  • PrintWriter : 텍스트 출력 기반 mapper
    → 텍스트 데이터를 쉽게 사용할 수 있게 관리한다.
    → 인자로 OutputStream을 받는다.

(4) 입력의 끝 확인하기

while((input = br.readLine()) != null) {
	System.out.println(input);
}

StringTokenizer

StringTokenizer st = new StringTokenizer(br.readLine(), " ");

st.nextToken();		// 다음 token값을 반환
st.hasMoreTokens();	// 다음 token값이 있다면 true, 없다면 false를 반환
st.countTokens()	// token의 개수를 반환

  • StringTokenizer은 한 줄을 입력받을 때마다 생성해주어야한다.

  • 숫자 하나만 받을 경우에는 StringTokenizer을 사용하지 않는 것이 좋다.

  • 공백 : split은 문자열의 시작에 오는 공백도 배열에 포함시키지만 StringTokenizer는 문자열의 시작에 오는 공백은 생략한다.


ArrayList

  • ArrayList의 remove메서드

    • num.remove(1) : 첫번째 index의 값을 제거한다.
    • num.remove(Long.valueOf(same_num)) : Object 객체를 매개변수로 받으며 처음 나온 same_num을 제거한다.
      → 여기에서는 Long.valueOf()를 통해 Long 객체로 변환해주었다.
    • while(num.remove(Long.valueOf(same_num))) {}를 통해 list안에 있는 모든 same_num을 제거한다.
  • arrayList도 foreach가능함.

  • 최대 최소

    • Collections.max(arrayList) : 최댓값 반환
    • Collections.min(arrayList) : 최소값 반환
  • 변수 포함, 확인

    • arrayList.contains(변수) : ArrayList안에 변수값을 포함하는지 true, false를 반환한다.
    • Collections.frequency(arrayList, Integer.valueOf(in)) : ArrayList안에 이 값이 몇 개 있는지를 반환
      → Collectons.frequency는 시간복잡도를 높으므로 사용하지 않는 것이 좋다.
    • arrayList.indexOf(Integer.valueOf(max_num)) : 입력받은 값의 index를 반환
  • 정렬

    • Collections.sort(arrayList) : ArrayList를 오름차순 정렬
    • Collections.sort(arrayList, Collections.reverseOrder()) : ArrayList를 내림차순 정렬
  • 배열 변환

// array -> list
ArrayList<String> list = new ArrayList<String>(Arrays.asList(ary));

// list -> array
list.toArray();

형 변환

  • String - int
// String -> int
int in = Integer.parseInt(String);

// int -> String
String st = Integer.toString(int);
  • String - char
//  char -> String
char[] ch = string.toCharArray();
string.charAt(index);	// String중에서 index의 값을 char로 반환
String.indexOf("a"); 	// String에서 a가 위치한 index값을 반환

// String -> char
char a = String.valueOf(char);

// String -> char[] : 다른 Wrapper Class는 배열 변환이 불가능하다.
String s = String.valueOf(charAry);
  • int - double
Double.valueOf(int);

: 같은 맥락으로 list에서 remove를 사용하기 위해
while(num.remove(Long.valueOf(same_num))) {} 의 경우가 있다.

  • char - int
// char -> int
int i = (int) c;	(명시적 형변환?)
int i = c;			(묵시적 형변환)

// int -> char
char c = (char) i;
char c = i;

코드를 작성할 때 꼭 알고리즘을 찾으려 하지말고 단순무식하게 짜도 된다.

0개의 댓글