today_is

[ 백준 3003번 ] 킹, 퀸, 룩, 비숍, 나이트, 폰 ( java ) 본문

java

[ 백준 3003번 ] 킹, 퀸, 룩, 비숍, 나이트, 폰 ( java )

ye_rang 2023. 12. 9. 20:41

문제

검정색 피스는 모두 있었으나, 흰색 피스는 개수가 올바르지 않았다.

체스는 총 16개의 피스를 사용하며, 킹 1개, 퀸 1개, 룩 2개, 비숍 2개, 나이트 2개, 폰 8개로 구성되어 있다.

동혁이가 발견한 흰색 피스의 개수가 주어졌을 때, 몇 개를 더하거나 빼야 올바른 세트가 되는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 동혁이가 찾은 흰색 킹, 퀸, 룩, 비숍, 나이트, 폰의 개수가 주어진다. 이 값은 0보다 크거나 같고 10보다 작거나 같은 정수이다.

출력

첫째 줄에 입력에서 주어진 순서대로 몇 개의 피스를 더하거나 빼야 되는지를 출력한다. 만약 수가 양수라면 동혁이는 그 개수 만큼 피스를 더해야 하는 것이고, 음수라면 제거해야 하는 것이다.

 

 


 

입력 예시

0 1 2 2 2 7

 

 

출력 예시

1 0 0 0 0 1

 

 


문제 파악하기

백준 사이트에서 제공되는 입력예시 1 과 출력예시 1 을 비교하여 문제를 파악해보았습니다.

기존 피스 개수 1 1 2 2 2 8
입력 받은 개수 0 1 2 2 2 7
차이값 +1 0 0 0 0 +1

 

주의사항

차이값을 출력시켜야한다.


정답 코드

import java.util.Scanner;
 
public class Main {
	public static void main(String[] args) {
		
		Scanner in = new Scanner(System.in);
		
		int king = 1;
		int queen = 1;
		int rook = 2;
		int bishop = 2;
		int knight = 2;
		int pawn = 8;
 
		king = king - in.nextInt();
		queen = queen - in.nextInt();
		rook = rook - in.nextInt();
		bishop = bishop - in.nextInt();
		knight = knight - in.nextInt();
		pawn = pawn - in.nextInt();
 
		
		System.out.print(king + " "); 
		System.out.print(queen + " ");
		System.out.print(rook + " ");
		System.out.print(bishop + " ");
		System.out.print(knight + " ");
		System.out.print(pawn);		
		
	}
}

 

미리, 변수들의 값을 지정해두고

입력받은 값이랑 비교한 뒤에 결과를 형식에 맞게 출력한다

 

 

 

 


study_review

실패 기록

 

처음에 제출한 코드 (런타임 에러 났음 ;;)

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
    
		Scanner sc = new Scanner(System.in);
		
		String compare = "112228";
		String str = sc.nextLine();
		
		str = str.replace(" ", "");
		
		String result = "";
		
		
		for(int i = 0; i < str.length(); i++) {
			char ch1 = compare.charAt(i);
			char ch2 = str.charAt(i);
			
			if(ch1 >= ch2) {
				result += (ch1 - ch2);
			}
			if(ch1 < ch2) {
				result += (ch1 - ch2);
			}
			if(i != str.length() - 1) {
				result += " ";
			}
		}
		System.out.print(result);
	}

}

 

이클립스에서 확인했을 때에는 에러가 안떠서 당당하게 제출했는데,

StringIndexOutOfBounds 가 떴다.

 

 

대체 왜 백준에서만 오류가 나는건지 잘 모르겠다.

 

 

의심 가는 부분은 입력을 nextLine()으로 받고, replace 처리 해주는게 오류 나는것 같은데..

조금 수정해서 다시 제출해도 틀렸다고 뜨더라.

 

좀 더 고민해봐야겠다.

 

이 부분에 대해서 알고 계신다면 꼭 알려주십쇼