백준 입력 처리 방법 - Scanner 클래스, 줄바꿈 문자 제거
코딩테스트 플랫폼 프로그래머스와 백준 중
백준은 내가 입력을 받는 부분까지 구현해야한다.
※ 입력이 많을 땐 BufferReader 사용할 것
(더 많이 쓴다. 일단 Scanner 클래스에 대해서만 정리해보려고 함)
1. import문
//Scanner 클래스 사용
import java.util.Scanner;
2. 내부에 Scanner 객체 생성
Scanner sc=new Scanner(System.in);
3. int 1개 입력받기
int num=sc.nextInt();
//int
//nextInt() 사용
4.sc.nextLine(); - 으로 남아 있는 줄바꿈 문자를 제거한다.
sc.nextLine();
int n = sc.nextInt();
sc.nextLine(); // '\n' 제거
String s = sc.nextLine(); // 제대로 읽힌다.
nextInt() 는 숫자만 읽고 개행은 버리지 않으므로
다음 라인을 읽고 싶다면
sc.nextLie(); 으로 줄바꿈 문자를 제거해줘야 한다.
메서드 | 역할 |
next() | 공백 전까지 읽음 (한 단어) |
nextLine() | 줄 끝까지 읽음 (한 줄 전체) |
nextInt() | 정수 ,실수 등 숫자만 읽고 개행은 버리지 않음 (따로 처리 필요) -줄바꿈 제거가 필요하다. |
■ 개행 제거하지 않았을 경우
■ 개행 제거했을 경우
백준 / 코딩테스트 입력 처리
1. 숫자 1개 입력받기
5
int n = sc.nextInt();
2. 한 줄에 숫자 여러 개 입력받기
10 20 30
100 8 32 16 40
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
또는 배열로 받기
int[] arr = new int[3]; // 크기 3 배열 int형의 arr 선언
for (int i=0;i<3;i++){
arr[i] = sc.nextInt();
}
//배열의 i 인덱스에 sc.nextInt() 넣기
3. 문자열 한 줄 받기
hello world
springboot
String s = sc.nextLine();
4, 공백으로 구분해야 하는 문자열 여러 개.
변수.split(원하는 내용)
을 배열에 넣어 바로 공백으로 구분된 배열을 만들 수 있다.
apple banana cherry
String line = sc.nextLine();
String[] words=line.split(" ");
◆ 배열 출력하기
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.Scanner;
// The main method must be in a class named "Main".
class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String numline=sc.nextLine();
String[] words=numline.split(" ");
//배열 출력(1) <for-each문>
for(String word : words){
System.out.println(word);
}
//배열 출력 (2)
for(int i=0;i<4;i++){
System.out.println(words[i]);
}
//그냥 배열을 출력하면 메모리 주소가 출력된다.
//System.out.println(words);
}
}
5. 첫 줄에 개수, 그 다음에 입력 반복
3
abc
def
ghi
int로 개수를 받고
입력 반복은 배열을 통한 nextLine 반복으로 n번 루프해서 받으면 된다.
int n = sc.nextInt();
sc.nextLine();
for(int i=0; i<n; i++){
String line=sc.nextLint();
}
6. 2차원 배열 입력
3 4
1 2 3 4
5 6 7 8
9 10 11 12
행, 열 순서대로 받고
n , m 사이즈의 이차원 배열 만들기
줄바꿈 제거 후
배열에 하나씩 split(" ") 으로 받기
int n = sc.nextInt();
int m = sc.nextInt();
int[][] arr = new int[n][m]; //배열 크기
sc.nextLint(); //줄바꿈제거
for(int i=0; i<n;i++) {
String[] tokens = sc.nextLine().split(" "); //tokens 배열에 받는다
for (int j=0; j<m; j++){
arr[i][j] = Integer.parseInt(tokens[j]); //기본적으로 입력이 문자열로 들어오므로 숫자로 변환
}
}
split 해서 배열에 넣으면
tokens=[1,2,3,4]
한 행씩
기본적으로 모든 입력은 Scanner,BufferedReader 같은 문자열로 들어온다
따라서 Integer(int의 클래스 버전, 다양한 메서드를 제공함)
따라서 integer.parseInt를 사용해 string -> int 형으로 바꿔 준다.
1234 입력
tokens = ['1','2','3','4']
1 2 3 4 에 숫자로 변환 후 arr[0][j] 저장
5678 입력
tokens = ["5", "6", "7", "8"]
5 6 7 8 에 숫자로 변환 후 arr[1][j]에 저장
9 10 11 12 입력
tokens = ["9","10","11","12"]
9 10 11 12에 숫자로 변환 후 arr[2][j] 에 저장