코딩 테스트

[코딩테스트] 백준 10871번: X보다 작은 수

dev.jelee 2025. 5. 19. 15:07

# 문제

주소: https://www.acmicpc.net/problem/10871

입력 받은 값에서 X보다 작은 수를 출력하기.

 

# 코드

▼ 코드1

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    String[] nx = br.readLine().split(" ");
    int N = Integer.parseInt(nx[0]);
    int X = Integer.parseInt(nx[1]);

    String[] input = br.readLine().split(" ");
    int[] numbers = new int[N];
    int result;

    for (int i = 0; i < N; i++) {
      numbers[i] = Integer.parseInt(input[i]);

      if (numbers[i] < X) {
        result = numbers[i];
        bw.write(result + " ");
      }
    }

    bw.flush();
    bw.close();
    br.close();
  }
}

 

▼ 코드2

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;

public class BOJ10871_v2 {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    int[] nx = Arrays.stream(br.readLine().split(" "))
                    .mapToInt(Integer::parseInt)
                    .toArray();
    int[] numbers = Arrays.stream(br.readLine().split(" "))
                    .limit(nx[0])
                    .mapToInt(Integer::parseInt)
                    .toArray();
    int result;

    for (int i = 0; i < nx[0]; i++) {
      if (numbers[i] < nx[1]) {
        result = numbers[i];

        bw.write(result + " ");
      }
    }

    bw.flush();
    bw.close();
    br.close();
  }
}

 

# 입/출력 결과

▼ 코드1 입/출력 결과

 

▼ 코드2 입/출력 결과

 

# 과정

▼ 코드1 과정

  1. BufferedReader + InputStreamReader 클래스를 사용하여 입력값 받기.
  2. BufferedWriter + OutputStreamWriter 사용해서 출력하기.
  3. String[] nx에 공백 기준으로 입력값 받기.
  4. int N과 int X에 각각 nx 요소 값 저장하기.
  5. String[] input = 공백 기준으로 입력값 받기.
  6. int[] numbers 에 N만큼 배열을 생성하기.
  7. int result; 결과값 저장할 변수 생성.
  8. for문 사용하여 계산
    • : 조건식을 int i = 0; i < N; i++ 작성.
    • : numbers[i] 마다 input[i]를 형번환해서 값 저장.
    • : if문을 사용하여 numbers[i]가 X보다 적으면 result에 numbers[i] 값 저장
    • : 그리고 bw.write()를 사용하여 result + " " 라고 작성하여 result값과 공백을 출력하도록 하기.
  9. for문 밖에서 .flush() 사용하여 출력과 데이터 비우기.
  10. bw와 br에 .close() 해주기.

 

▼ 코드2 과정

  1. BufferedReader + InputStreamReader 클래스를 사용하여 입력값 받기.
  2. BufferedWriter + OutputStreamWriter 사용해서 출력하기.
  3. int[] nx에 Arrays사용
    • : .stream()을 사용하여 입력값을 공백 기준으로 나누어서 받기.
    • : .mapToInt() 사용하여 입력받은 값들을 숫자타입으로 변형.
    • : .toArray() 사용하여 배열로 저장.
  4. int[] numbers에 Arrays사용
    • : (3)번과 동일한 방법.
    • : 추가된 것은 .limit()를 사용하여 nx[0] 만큼 입력값 받기.
  5. int result 선언.
  6. for문 사용해서 계산하기.
    • : int i = 0; i < nx[0]; i++ 조건식
    • : if문을 사용하여 numbers[i]가 nx[0] 보다 작으면
    • : result에 numbers[i] 값 저장하기.
    • : bw.write() 사용하여 result + " " 모아두기.
  7. for문 밖에서 .flush() 사용하여 출력과 데이터 비우기.
  8. br과 bw에 .close() 사용하여 닫아주기.

 

# 느낀 점

  • 이틀 정도 1차원 배열에 대해서 익숙하지 않아서 계속 작성하고 시도해본 결과 오늘 문제 풀면서 조금은 익숙해졌다고 느꼈다. 왜냐하면 먼저 노트에 작성할 때 어떻게 풀어야할지 순차적으로 잘 작성되었기 때문이다.
  • 나중에 코드로 옮길 때 실패해서 왜 그런지 찾아보고 다시 수정하는 일도 있었지만, 결국엔 성공!