ALGORITHM/백준(BAEKJOON)
백준(BAEKJOON) - 10871번: X보다 작은 수 (Java) *** StringTokenizer
Doraemon_lulu
2023. 12. 10. 23:45
Scanner 클래스, for문, 배열 활용
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int X = sc.nextInt();
// 수열 A를 저장할 numbers 배열
int[] numbers = new int[count];
// 수열 A를 이루는 정수 N개를 입력하기 위한 for문
for (int i = 0; i < N; i++) {
numbers[i] = sc.nextInt();
}
// 정수 X 값보다 작은 정수를 출력함.
for (int i = 0; i < N; i++) {
if (numbers[i] < X) {
System.out.print(numbers[i] + " ");
}
}
}
}
BufferedReader, InputStreamReader, StringBuilder, StringTokenizer, for문, 배열 활용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int X = Integer.parseInt(st.nextToken());
StringBuilder sb = new StringBuilder();
st = new StringTokenizer(br.readLine());
int[] numbers = new int[N];
for (int i = 0; i < N; i++) {
numbers[i] = Integer.parseInt(st.nextToken());
}
for (int i = 0; i < N; i++) {
if (numbers[i] < X) {
sb.append(numbers[i]).append(" ");
}
}
System.out.println(sb);
}
}
▼ 배열 없이, StringTokenizer 통해 입력된 문자열을 곧바로 X 값과 비교하여 StringBuffer 변수로 저장하여 결과 확인 가능함.
→ 좀 더 간결한 코드로 작성 가능하며 메모리 사용 줄일 수 있음.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 첫번째 줄에서 공백(space) 기준으로 나누어 N, X에 각각 저장
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int X = Integer.parseInt(st.nextToken());
StringBuilder sb = new StringBuilder();
// 두번째 줄에서 공백(space) 기준으로 나누어 각 문자열을 X 값과 비교
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
int numbers = Integer.parseInt(st.nextToken());
if (numbers < X) {
sb.append(numbers).append(' ');
}
}
System.out.println(sb);
}
}
■ StringTokenizer 사용 시 주의사항
문제를 풀기 위해서는 첫째 줄에 N, X를 입력해야 하고 둘째 줄에 수열 A를 이루는 정수 N개를 공백으로 구분하여 입력해야 함.
StringTokenizer는 문자열 분리자이고, 관련 코드는 다음과 같이 해석 가능함.
StringTokenizer st = new StringTokenizer(br.readLine());
→ 한 줄을 문자열로 읽고 공백(" ")을 기준으로 분리한다.
즉, 다음과 같이 StringTokenizer 객체 생성 및 초기화를 1회만 하는 경우 다음과 같은 문제가 발생하게 됨.
→ 둘째 줄의 수열 A를 이루는 정수 N개를 공백으로 구분하여 입력하고자 할 때, 'NoSuchElementException' 에러 발생함.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int X = Integer.parseInt(st.nextToken());
StringBuilder sb = new StringBuilder();
// st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
int numbers = Integer.parseInt(st.nextToken()); // NoSuchElementException 에러 발생
if (numbers < X) {
sb.append(numbers).append(' ');
}
}
System.out.println(sb);
}
}