본문 바로가기

Coding Test/PS

[백준/Java] 10871번: X보다 작은 수 (브론즈5)

🟤 백준 10871번: X보다 작은 수 (브론즈5)

 

문제 풀이

1차 풀이

import java.util.*;
import java.lang.*;
import java.io.*;

// 문제 풀이: 250323(일)
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());
        
        // 다음 행에 있는 입력값 받기
        st = new StringTokenizer(br.readLine());
        
        // n 크기의 배열 생성
        int[] arr = new int[n];
        
        // int로 형 변환
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }
        
        // 결과: x보다 작은 수 출력
        for (int i = 0; i < n; i++) {
            if (arr[i] < x) {
                System.out.print(arr[i] + " ");
            }
        }
    }
}

 

StringTokenizer

  • nextToken() : 다음 토큰 반환 (String으로 반환)

 

2차 풀이

import java.util.*;
import java.lang.*;
import java.io.*;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder(); // 출력 모음용
        
        // 문자열을 구분자로 분리하여 입력 받기
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int x = Integer.parseInt(st.nextToken());
        
        // 다음 행에 있는 입력값 받기
        st = new StringTokenizer(br.readLine());
        
        // n 크기의 배열 생성
        int[] arr = new int[n];
        
        // int로 형 변환
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }
        
        // StringBuilder에 문자열 추가
        for (int i = 0; i < n; i++) {
            if (arr[i] < x) {
                sb.append(arr[i]).append(" ");  // 출력 시 공백 구분자
            }
        }
        
        // 결과: x보다 작은 수 출력
        System.out.println(sb);
    }
}

 

StringBuilder로 한 번에 출력

String 객체끼리 더하는 방식은 메모리 할당과 해제 발생

→ 덧셈 연산 많아지면 성능적으로 좋지 않음

참고: Java에서 StringBuffer와 StringBuilder를 사용하는 이유

 

많은 문자열을 연결하면 많은 중간 문자열 객체가 생성되어 비효율적인 코드 생성됨

∵ Java에서 String 객체는 변경 불가능

하나의 문자열을 다른 문자열과 연결하면 새 문자열 생성되고, 이전 문자열은 가비지 컬렉터로 들어감

 

StringBuilder는 변경 가능한 문자열을 만들어 주기 때문에 String을 합치는 작업 시 사용

StringBuilder sb = new StringBuilder(); // 출력 모음용

// StringBuilder에 문자열 추가
for (int i = 0; i < n; i++) {
    if (arr[i] < x) {
        sb.append(arr[i]).append(" ");  // 출력 시 공백 구분자
    }
}
  • append() : 인자로 연결하고자 하는 문자열 추가

참고 자료

https://onlyfor-me-blog.tistory.com/317

 

[JAVA] StringBuilder란? StringBuilder 사용법

자바에서 문자열하면 String을 대개 많이 떠올리고 사용할 것이다.그런데 이 문자열이 1개 이상 있어서 이것들을 더해야(합쳐야) 한다고 하면 어떤 방법을 쓸 수 있을까?간단하게는 이 방법을 쓸

onlyfor-me-blog.tistory.com