[Java] 알고리즘 Day1

2024. 7. 2. 14:07·알고리즘

자바 입력

1. 개요

  • 일반적으로 자바에서는 Scanner를 사용하여 입력을 받습니다.
  • 하지만 Scanner는 입력을 처리할 때 상대적으로 느립니다.
  • 특히 많은 양의 입력을 처리해야 하는 경우, BufferedReader에 비해 성능이 떨어집니다.
  • 따라서 코딩테스트에서 주로 사용되는 방법은 BufferedReader와 InputStreamReader입니다.

2. 자바의 입력 클래스

BufferedReader & InputStreamReader

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
  • System.in -> 표준 입력 스트림으로, 사용자가 콘솔에 입력하는 바이트 데이터를 읽습니다.
  • InputStreamReader() -> 바이트 스트림(System.in)을 문자 스트림으로 변환합니다. 즉, 사용자가 입력한 바이트 데이터를 문자 데이터로 변환합니다.
  • BufferedReader() -> InputStreamReader로부터 문자 데이터를 읽고 이를 버퍼링하여 효율적으로 처리할 수 있도록 합니다.
  • br.readLine() -> 사용자가 입력한 한 줄의 문자열을 읽어 반환합니다.

StringTokenizer

StringTokenizer st = new StringTokenizer(str);
  • 문자열을 공백이나 ,와 같은 구분자를 기준으로 분리하는 데 사용되는 클래스입니다.
  • 문자열을 토큰 단위로 분리하여 쉽게 처리할 수 있게 해줍니다.
  • 기본 구분자는 공백
더보기

StringTokenizer vs split()

  • StringTokenizer는 내부적으로 정규 표현식을 사용하지 않기 때문에 상대적으로 빠르지만 기능이 제한적이며, 복잡한 구분자나 조건을 처리하기 어렵습니다.
  • split은 정규 표현식을 사용하여 문자열을 분리하기 때문에 더 유연하고 강력한 기능을 제공하지만 StringTokenizer보다 느립니다.

여러가지 입력에 대한 처리 예시

1. 입력: 1 2 3 4 5 -> int 배열

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
StringTokenizer st = new StringTokenizer(str); 
int[] input = new int[5];
for (int i = 0; i < 5; i++) {
	input[i] = Integer.parseInt(st.nextToken()); // "1" -> 1, "2" -> 2....
}
System.out.println(Arrays.toString(input));

 

 

2.입력: 1 A 3 B 5 0 -> char 배열

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
StringTokenizer st = new StringTokenizer(str); 

char[] input = new char[5];
for (int i = 0; i < 5; i++) {
	input[i] = st.nextToken().charAt(0); // "1" -> '1', "2" -> 'A'....
}
System.out.println(Arrays.toString(input));

 

3. 입력: XYZQU -> 문자열을 char 배열로

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] input = br.readLine().toCharArray();
System.out.println(Arrays.toString(input));

 

4.입력: 6 (n개)
1 2 3 4 5 1

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] input = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
		input[i] = Integer.parseInt(st.nextToken());
}
System.out.println(Arrays.toString(input));

 

5. 입력: 5
XYZQU

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine()); // N
char[] input = br.readLine().toCharArray();
System.out.println(Arrays.toString(input));

 

6. 입력: 5
1 2 3 4 5
6 7 8 9 0
1 2 3 4 5
6 7 8 9 0
1 2 3 4 5

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
System.out.println(N);
int[][] input = new int[N][N];
for (int i = 0; i < N; i++) { // 행
	StringTokenizer st = new StringTokenizer(br.readLine());
	for (int j = 0; j < N; j++) { // 열
		input[i][j] = Integer.parseInt(st.nextToken());
	}
}
for (int i = 0; i < N; i++) { // 행
	System.out.println(Arrays.toString(input[i]));
}

 

7. 입력: 3 5
1 2 3 4 5
6 7 8 9 0
1 2 3 4 5

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()); // "3 5"
int N = Integer.parseInt(st.nextToken()); // 3
int M = Integer.parseInt(st.nextToken()); // 5

int[][] input = new int[N][M];
for (int i = 0; i < N; i++) { // 행
	st = new StringTokenizer(br.readLine());
	for (int j = 0; j < M; j++) { // 열
		input[i][j] = Integer.parseInt(st.nextToken());
	}
}			
for (int i = 0; i < N; i++) { // 행
    System.out.println(Arrays.toString(input[i]));
}

'알고리즘' 카테고리의 다른 글

[Java] 알고리즘 Day6  (0) 2024.07.04
[Java] 알고리즘 Day5  (0) 2024.07.04
[Java] 알고리즘 Day4  (0) 2024.07.02
[Java] 알고리즘 Day3  (0) 2024.07.02
[Java] 알고리즘 Day2  (0) 2024.07.02
'알고리즘' 카테고리의 다른 글
  • [Java] 알고리즘 Day5
  • [Java] 알고리즘 Day4
  • [Java] 알고리즘 Day3
  • [Java] 알고리즘 Day2
Jaemin0604
Jaemin0604
정재민님의 블로그 입니다.
  • Jaemin0604
    정재민님의 블로그
    Jaemin0604
  • 전체
    오늘
    어제
    • 분류 전체보기 (23)
      • 알고리즘 (9)
      • 자료구조 (3)
      • 코딩테스트 (1)
        • 백준 (1)
        • 프로그래머스 (0)
      • CS공부 (7)
        • 운영체제 (2)
        • 네트워크 (2)
        • 데이터베이스 (2)
        • 자료구조 (1)
        • 알고리즘 (0)
      • 프로그래밍 언어 (3)
        • Java (3)
        • Swift (0)
      • 백엔드 개발 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Jaemin0604
[Java] 알고리즘 Day1
상단으로

티스토리툴바