본문 바로가기
알고리즘 풀이

[백준] 3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰 - java 풀이

by 코디드 2023. 6. 21.

체스를 할때 원래 필요한 피스의 개수를 미리 배열에 넣어주고 입력 받은 킹, 퀸, 룩, 비숍, 나이트, 폰의 피스의 개수를 빼주면 되는 문제다.

 

split() 이용

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

public class Main {

	public static void main(String[] args) throws IOException{
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int[] chess = {1,1,2,2,2,8};
		
		String[] chCnt = br.readLine().split(" ");
		
		StringBuilder sb = new StringBuilder();
		
		for(int i=0; i<chess.length; i++) {
			sb.append(chess[i] - Integer.parseInt(chCnt[i])).append(" ");
		}
		System.out.println(sb);
	}
}

 

입력받은 숫자를 split 으로 쪼개 새로운 배열에 넣어주고 반복문을 돌려 킹은 킹끼리, 퀸은 퀸끼리... 폰은 폰끼리 빼서 출력해주면 된다.

 

 

 

 

 

StringTokenizer 이용

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException{
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int[] chess = {1,1,2,2,2,8};
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		StringBuilder sb = new StringBuilder();
		
		for(int i=0; i<chess.length; i++) {
			sb.append(chess[i] - Integer.parseInt(st.nextToken())).append(" ");
		}
		System.out.println(sb);
	}
}

 

새로운 배열을 만들지 않기 때문에 메모리를 조금 덜 차지하면서 풀 수 있었다.

 

다른 블로그 풀이들을 참고하니 킹부터 폰까지의 개수가 몇개 안되다보니 일일이 int king=1, int queen=1.... int pawn=8 이렇게 초기화 해줬는데 배열을 사용하지 않아 메모리는 훨씬 덜 사용하나 효율적이지 못하다는 생각이 들었다.