코딩 테스트

[코딩테스트] 백준 3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰

dev.jelee 2025. 6. 16. 14:17

# 문제

 

# 코드

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

public class BOJ3003_v1 {
  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("\\s+");
    int[] chessInput = new int[6]; // 체스는 6종류로 구성
    ArrayList<Integer> chess = new ArrayList<>();
    int diff = 0;

    // 체스 기본값: 킹 1, 퀸 1, 룩 2, 비숏 2, 나이트 2, 폰 8
    chess.add(0, 1);
    chess.add(1, 1);
    chess.add(2, 2);
    chess.add(3, 2);
    chess.add(4, 2);
    chess.add(5, 8);


    // input값 chessInput에 담고 chess와 비교하는 계산
    for (int i = 0; i < chessInput.length; i++) {
      // chessInput에 input값 담기
      chessInput[i] = Integer.parseInt(input[i]);

      // chessInput과 chess 비교
      diff = chess.get(i) - chessInput[i];
      bw.write(diff + " "); // 데이터 임시 저장
    }
    
    bw.flush(); // 데이터 출력과 비우기
    bw.close(); // 종료
    br.close(); // 종료

  }
}

 

# 입/출력 결과

 

# 과정

  1. 입력은 BufferedReader 클래스 사용
  2. String[] input에 입력값을 공백 기준으로 나누어 저장
  3. int[] chessInput을 크기 6으로 생성
  4. ArrayList<Integer> chess 생성
  5. 차이 계산을 위해 int diff = 0; 선언과 초기화
  6. chess에 .add() 메서드를 사용하여 킹, 퀸, 록, 비숏, 나이트, 폰 값을 순차적으로 저장
  7. for문 계산
    • : chessInput.length 만큼 반복하여 chessInput에 input 요소들 저장
    • : diff에 chess.get(i) - chessInput[i] 값을 담기
    • : bw.wirte(diff) 사용하여 데이터 임시 저장
  8. bw.flush()로 데이터 출력과 비우기
  9. bw와 br .close() 해주기

 

# 메모

  • 마지막에 출력을 할 때, bw가 출력을 하지 않아서 왜 그런가 싶었는데 BufferedWriter.write()는 문자 하나를 출력하는 메서드라서 int값이 들어가면 숫자 값이 아니라 아스키코드처럼 문자로 해석해서 출력한다고 한다. (chat-gpt 검색)
  • 그래서 String.valueOf()를 사용하여 문자열로 변환해주던가 뒤에 + "" 를 붙여 문자열로 바꾸어줘야한다고 했다.
  • System.out.println() 으로 출력하였을 경우에는 출력이 잘 되길래 도대체 어느 부분이 잘못된 것인지 몰랐는데 chat-gpt를 통해 알게되었다.