코딩 테스트

[코딩테스트] 백준 10810번: 공 넣기

dev.jelee 2025. 5. 21. 15:01

# 문제

 

# 코드

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[] input = br.readLine().split(" ");
    int N = Integer.parseInt(input[0]); // 바구니 개수 
    int M = Integer.parseInt(input[1]); // 공 개수 

    int[] basket = new int[N]; // 바구니 1 ~ N

    for (int i = 0; i < M; i++) { // 공 번호 만큼 반복
      String[] ex = br.readLine().split(" ");
      int basket1 = Integer.parseInt(ex[0]);
      int basket2 = Integer.parseInt(ex[1]);
      int ballNum = Integer.parseInt(ex[2]);

      for (int j = basket1; j <= basket2; j++) {
        basket[j-1] = ballNum; // index 때문에 -1
      }
    }

    for (int i = 0; i < basket.length; i ++) {
      bw.write(basket[i] + " "); // 각 바구니 안에 있는 공 번호 저장.
    }

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

 

# 입/출력 결과

 

# 과정

  1. BufferedReader + InputStreamReader 클래스를 사용하여 입력값 받기.
  2. BufferedWriter + OutputStreamWriter 사용해서 출력하기.
  3. String[] input에 입력값 받아서 공백 기준으로 나누어 저장.
  4. int N, int M에 각각 input 값 담기.
  5. int[] basket에 배열 길이를 N으로 생성.
  6. for문 사용해서 계산
    • : int i = 0; i < M 만큼 반복.
    • : 반복 때마다 String[] ex에 입력값 받아서 공백 기준으로 나눈 다음 저장.
    • : int basket1, int basket2, int ballNum에 각각 ex 값 저장.
    • : 중첩 for문을 사용해서 입력받은 첫번째 바구니와 두번째 바구니에 ballNum을 저장.
  7. 그 다음 for문에서 basket.lengh에 맞추어 반복하여 bw.write() 사용해서 바구니에 담긴 공 모아두기.
  8. bw.flush() 사용해서 출력하고 데이터 비우기
  9. bw와 br에 .close() 사용해서 종료해주기.

 

# 느낀 점

  • 처음에 문제를 이해하는데 어려움이 있었다. 입력, 출력 글과 예제 입력, 예제 출력을 보고 문제를 이해하는데 도움이 되었다. (내가 이해력이 부족한건가...)
  • 이번 문제는 for문을 많이 사용했다. 그리고 배열을 사용하기 위해서 생각을 많이 하게 되었다. 
  • 중간에 basket을 최종 출력할 때 0이 맨 앞에 와서 다시 생각해보니 컴퓨터는 0부터 시작하기 때문에 -1을 해줘야한다는 걸 알아차렸다.