[JAVA] 백준 주의사항

세하·2024년 1월 29일

[백준] 문제풀이

목록 보기
1/94
post-thumbnail

📍 기본

  1. 제출시 클래스명은 Main
    • Main 이외의 클래스를 추가로 쓰고 싶으면 public이 아닌 클래스 혹은 inner 클래스로 사용
    • main문 자체가 static 함수이므로 거기서 사용하는 전역변수 및 모든 함수 또한 static이어야 한다.
  2. import 부분은 포함, package명은 제거
  3. 입력을 위한 클래스는 하나만 사용
    • System.in 이 들어간 클래스는 하나만 생성하는 것이 좋다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main{
    private int a = 0;
    private int b, c;

    //클래스 내부 함수 선언
    private void test(){
    	//input your code
    }

    public static void main(String[] args) throws Exception {
        //input your code
    }
}

📍 runtime error를 막기위한 방법

  1. Scanner 보다 BufferedReader 사용 (사용 후 close() 해주기)

    • br.read() : 하나의 char값을 받으며, char값을 아스키코드로 변환하여 0 - 65535 사이 범위의 int값을 리턴
    • br.readLine() : 한 줄(개행 문자 기준) 전체를 String으로 리턴

      readLine()는 항상 string형 : String str = br.readLine();
      - string -> int : int num = Integer.parseInt(str);
      - int,char -> string : String str = String.valueOf(num);
      - string -> char : char ch1 = str.charAt(0); // str의 길이가 1인 경우
            char[] ch2 = str.toCharArray(); // str의 길이가 2이상인 경우
      char array를 출력하여 확인 : Arrays.toString(str.toCharArray())

  2. split() 보다 StringTokenizer 사용

StringTokenizer st = new StringTokenizer(문자열, 구분자, boolean)
  • 구분자에 "-+" 를 입력한다면 -와 +를 기준으로 문자열을 나눔. 디폴트는 공백
  • boolean은 구분자도 토큰에 포함할지를 결정. true라면 구분자도 토큰에 포함. 디폴트는 false

hasMoreTokens() , nextToken(), countTokens()

  1. System.out.println()는 느리다! 대신 StringBuilder 사용
    StringBuilder로 출력할 것들을 전부 append 한 후 System.out.println()으로 한번에 출력
	sb.append(result.size()).append("\n");
    for(String s : result){
        sb.append(s).append("\n");
    }
    System.out.println(sb);

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main{
    public static void main(String[] args) throws Exception {
        long sum = 0;
        long[] arr = new long[3];
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

		//구분자 지정 안하면 띄어쓰기 기준으로 구분
        StringTokenizer st = new StringTokenizer(br.readLine());
        //문자열(br.readLine())을 받아 구분자를 기준으로 문자열 분리
        //StringTokenizer st = new StringTokenizer(br.readLine(), ",");
        for(int i = 0; i < 3; i++){
            arr[i] = Long.parseLong(st.nextToken());
            sum += arr[i];
        }
        sb.append(sum).append('\n');
        br.close();

        System.out.println(sb);
    }
}

0개의 댓글