
내가 생각했을때 문제에서 원하는부분
The first line of the input contains only one integer, N – the number told by Mihai’s mother.
The output contains two integers separated by space, the numbers which form the number told by Mihai’s mother.
내가 이 문제를 보고 생각해본 부분
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));:
BufferedReader 객체를 생성하여 표준 입력(콘솔)으로부터 데이터를 읽을 준비를 한다.
InputStreamReader는 바이트 스트림(System.in)을 문자 스트림으로 변환해 주는 역할을 한다.
String Nstr = br.readLine();:
문제에서 N의 범위가 최대 10^18이라고 주어졌는데, 이는 자바의 int 타입(약 2 * 10^9)으로 담을 수 있는 범위를 훨씬 넘어선다.
long 타입(약 9 * 10^18)으로는 담을 수 있지만, 숫자를 자리 수 단위로 쪼개는 작업은 String을 이용하는 것이 훨씬 간편하고 직관적이다.
그래서 N을 숫자 타입으로 파싱하지 않고, 바로 String 형태로 읽어온다.
int length = Nstr.length();:
읽어온 문자열 Nstr의 총 길이를 length 변수에 저장한다.
문제 조건에서 N은 항상 짝수 자리 숫자라고 명시되어 있다.
int mid = length / 2;:
Nstr을 정확히 두 부분으로 나누기 위한 중간 지점의 인덱스를 계산한다.
예를 들어, 길이가 4라면 mid는 2가 되고, 길이가 6이라면 mid는 3이 된다.
String firstHalf = Nstr.substring(0, mid);:
Nstr에서 첫 번째 절반에 해당하는 문자열을 추출한다.
substring(startIndex, endIndex) 메서드는 startIndex부터 endIndex-1까지의 부분을 반환한다.
따라서 0부터 mid-1까지의 문자들이 firstHalf에 저장된다.
String secondHalf = Nstr.substring(mid);:
Nstr에서 두 번째 절반에 해당하는 문자열을 추출한다.
substring(startIndex) 메서드는 startIndex부터 문자열의 끝까지의 부분을 반환한다.
따라서 mid부터 끝까지의 문자들이 secondHalf에 저장된다.
System.out.println(firstHalf + " " + secondHalf);:
추출한 firstHalf와 secondHalf를 공백(" ")으로 이어붙여 콘솔에 출력한다.
문제에서 요구하는 최종 출력 형식이다.
br.close();:
사용이 끝난 BufferedReader를 닫아서 시스템 자원 누수를 방지한다.
코드로 구현
package baekjoon.baekjoon_32;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 21955번 문제
public class Main1265 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 입력받는 N이 최대 10^18까지 가능하므로, int 타입 대신 String으로 읽습니다.
String Nstr = br.readLine();
// 숫자의 총 길이를 구합니다. (짝수임이 보장됩니다)
int length = Nstr.length();
// 숫자를 정확히 절반으로 나눌 인덱스를 계산합니다.
int mid = length / 2;
// String의 substring 메서드를 사용하여 앞부분과 뒷부분을 분리합니다.
// 첫 번째 부분: 인덱스 0부터 mid-1까지
String firstHalf = Nstr.substring(0, mid);
// 두 번째 부분: 인덱스 mid부터 끝까지
String secondHalf = Nstr.substring(mid);
// 두 부분을 공백으로 구분하여 출력합니다.
System.out.println(firstHalf + " " + secondHalf);
br.close(); // BufferedReader를 닫아 자원을 해제합니다.
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.