728x90
사용 언어 : Java 11
플랫폼 : 백준, 프로그래머스
1. 입출력
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
}
Scanner는 정규 표현식을 사용하고 버퍼링을 제한적으로 수행하여
대량의 데이터 입력에 효율적이지 않기 때문에 BufferedReader를 사용하는 것이 좋다.
StringTokenizer st = new StringTokenizer(br.readLine());
int current = Integer.parseInt(st.nextToken());
입력이 공백 단위로 주어지는 경우에는 String 클래스의 split 메서드 보다
StringTokenizer를 사용하는 것이 편리하고 효율적이다.
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("출력");
bw.flush();
bw.close();
출력도 마찬가지로 여러 번의 출력이 반복되는 경우에는 BufferedWriter를 사용하는 것이 좋다.
(flush를 호출해 줘야 출력이 된다)
StringBuilder sb = new StringBuilder();
sb.append("0\n");
sb.append("0\n");
sb.append("0\n");
bw.write(sb.toString());
bw.flush();
write를 여러 번 해줘야 한다면 StringBuilder를 사용하여
문자열을 만든 후에 한 번에 출력하는 것이 효율적이다.
BufferedReader와 BufferedWriter를 사용하는 경우에는
반드시 예외 처리를 해줘야 한다.
2. 객체 사용
class Tower {
int number;
int height;
public Tower(int number, int height) {
this.number = number;
this.height = height;
}
}
특정 데이터들을 저장해야 하는 경우에는 객체 단위로 저장하는 것도 좋은 방법이다.
3. ListIterator
List<Integer> list = new ArrayList<>();
ListIterator iterator = list.listIterator();
ListIterator를 사용하여 전후 탐색을 O(1)의 시간 복잡도로 수행 할 수 있다.
배열은 객체가 연속적으로 존재해서 상관 없지만
연결 리스트 같은 경우는 불연속적이기 때문에 매번 O(N)의 시간 복잡도로
데이터를 탐색해야 하기 때문에 이터레이터를 사용하면 효율적으로 처리 가능하다.
4. 변수에 저장하기
boolean reversed;
boolean isArrive;
String status;
객체에 저장하던 것처럼 특정 상태나 기록해둬야 하는 것들을 변수에 저장하는 것도 좋다.
'Diary' 카테고리의 다른 글
[백준] 스트릭 64일 (1) | 2023.12.04 |
---|---|
[백준] 골드 달성! (0) | 2023.11.02 |
[백준] 새싹 5단계 뱃지! (0) | 2023.11.02 |
[백준] 30일 잔디 심기 (0) | 2023.10.31 |
230919 프로젝트 최종 정리 및 회고 (0) | 2023.09.19 |