코딩테스트/코딩테스트 관련 개념정리

백준 입력 처리 방법 - Scanner 클래스, 줄바꿈 문자 제거

카페인곰 2025. 3. 21. 15:37

 

코딩테스트 플랫폼 프로그래머스와 백준 중

백준은 내가 입력을 받는 부분까지 구현해야한다.

 

 

※ 입력이 많을 땐 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] 에 저장