이 영역을 누르면 첫 페이지로 이동
Stranger's LAB 블로그의 첫 페이지로 이동

Stranger's LAB

페이지 맨 위로 올라가기

Stranger's LAB

프로그래밍과 관련하여 다양한 알고리즘 문제를 풀어보고, 프로그래밍 언어를 이해해 볼 수 있도록 돕고자 만든 블로그 입니다.

[백준] 3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰 - JAVA [자바]

  • 2022.09.06 18:22
  • JAVA - 백준 [BAEK JOON]/입출력과 사칙연산
글 작성자: ST_
728x90





 


https://www.acmicpc.net/problem/3003

 

3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰

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

www.acmicpc.net

 

 

 

 

 

 

 

 





  • 문제

 

 

 

 

 

기본 조건문만 안다면 그리 어렵지 않은 문제다.

 

 

 

 

 

 

 

 





  • 알고리즘 [접근 방법]

 



 

체스.. 예전에 진짜 자주 두었었던 게임이다.. 

킹 1, 퀸 1, 룩 2, 비숍 2, 나이트 2, 폰 8로 총 16개의 말을 활용하여 상대 말들을 하나씩 따내면서 체크메이트를 만들거나 스테일메이트 등 기본적으로 왕이 움직일 수 없게 만들거나 잡힐 수 밖에 없는 상황을 만들어 이기면 된다.

 

아무튼.. 위 본문에도 나와있듯 각 체스말들의 개수는 고정되어있고, 입력으로는 현재 갖고 있는 말의 개수가 된다.

그래서 실제 필요한 체스말의 개수에 맞추어 그 차를 구하면 되는 것이다.

 

그러면 푸는 방법은 간단하다.

각 킹, 퀸, 룩, 비숍, 나이트, 폰 변수를 선언하여 초기값으로 원래 정상적인 말의 개수로 초기화 한다음, 입력받은 각 수들을 각 체스말에 맞추어 해당 변수에서 빼면 된다.

 

자세한 것은 코드를 보도록 하자.

 

 

 

 

 

 

 

 

 

 





  • 2가지 방법을 사용하여 풀이한다.

 



이전 포스팅과 여타 다를 바 없이 Scanner와 BufferedReader를 활용하여 성능을 비교해보려한다.

BufferedReader의 경우 앞선 포스팅에서도 언급했으니 만약 쓰는 방법을 모른다면 아래 링크를 통해 읽어보는 것을 추천한다.

 

https://st-lab.tistory.com/12

 

[백준] 1000번 : A+B - JAVA [자바]

https://www.acmicpc.net/problem/1000 1000번: A+B 문제 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 A와 B가 주어진다. (0 < A, B < 10) 출력 첫째 줄에 A+B를 출력..

st-lab.tistory.com

 

 

 

 

 

 






  • 풀이





- 방법 1 : [Scanner]

 

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();

		// 참고로 출력형식을 보면 각 변수들사이에 공백으로 구분 된한 줄로 출력해야한다.
		// 즉, 개행(줄바꿈)이 발생하는 println을 쓰면 안된다.
		System.out.print(king + " ");
		System.out.print(queen + " ");
		System.out.print(rook + " ");
		System.out.print(bishop + " ");
		System.out.print(knight + " ");
		System.out.print(pawn);		
		
	}
}

 

 

가장 기본적인 방법이라 할 수 있겠다.

 

주석으로도 써놓았지만, 한 줄로 출력해야 하고 그 변수들은 각 공백을 기준으로 구분되기 때문에 각 변수 뒤에 공백을 넣어 출력해주어야 한다.

 

 











- 방법 2 : [BufferedReader]

 

 

 

입력 방법을 Scanner 대신 BufferedReader 을 사용하여 풀이하는 방법이다. 단, BufferedReader 는 문자열을 한 줄로 읽기 때문에 입력받은 문자열을 공백으로 분리해주어야하니 StringTokenizer 을 사용하여 풀도록 하겠다.

 

 

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

public class Main {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int king = 1;
		int queen = 1;
		int rook = 2;
		int bishop = 2;
		int knight = 2;
		int pawn = 8;
		
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		king = king - Integer.parseInt(st.nextToken());
		queen = queen - Integer.parseInt(st.nextToken());
		rook = rook - Integer.parseInt(st.nextToken());
		bishop = bishop - Integer.parseInt(st.nextToken());
		knight = knight - Integer.parseInt(st.nextToken());
		pawn = pawn - Integer.parseInt(st.nextToken());

		System.out.print(king + " ");
		System.out.print(queen + " ");
		System.out.print(rook + " ");
		System.out.print(bishop + " ");
		System.out.print(knight + " ");
		System.out.print(pawn + " ");		
		
	}
}

 

 

 

입력과 StringTokenizer를 쓸 줄 안다면 크게 어려울 것은 없을 것이다.

 

 

 

 

 

 

 

 

 





  • 성능






 

 

채점 번호 : 48822200  -  방법 2 : BufferedReader

채점 번호 : 48822197  -  방법 1 : Scanner

 

 

입력의 경우는 확실히 Scanner 보다는 BufferedReader 가 빠른 걸 볼 수 있다.








  • 정리

 



간단한 입출력 문제라 크게 어렵지는 않았을 것이다.

특히, 자바의 경우 '숫자 + 문자열' 형식으로 출력문에 넣어주면 자연스레 숫자는 String으로 변환되어 출력해주기 때문에 출력에 있어 매우 용이한 점이 있다.

혹여 어렵거나 이해가 되지 않는 부분이 있다면 언제든 댓글을 남겨주시면 감사하겠다.

 

 



저작자표시 비영리 변경금지 (새창열림)

'JAVA - 백준 [BAEK JOON] > 입출력과 사칙연산' 카테고리의 다른 글

[백준] 18108번 : 1998년생인 내가 태국에서는 2541년생?! - JAVA [자바]  (4) 2022.06.21
[백준] 10926번 : ??! - JAVA [자바]  (0) 2022.06.17
[백준] 25083번 : 새싹 - JAVA [자바]  (2) 2022.05.07
[백준] 2588번 : 곱셈 - JAVA [자바]  (15) 2020.02.09
[백준] 10430 번 : 나머지 - JAVA [자바]  (6) 2020.02.09

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [백준] 18108번 : 1998년생인 내가 태국에서는 2541년생?! - JAVA [자바]

    [백준] 18108번 : 1998년생인 내가 태국에서는 2541년생?! - JAVA [자바]

    2022.06.21
  • [백준] 10926번 : ??! - JAVA [자바]

    [백준] 10926번 : ??! - JAVA [자바]

    2022.06.17
  • [백준] 25083번 : 새싹 - JAVA [자바]

    [백준] 25083번 : 새싹 - JAVA [자바]

    2022.05.07
  • [백준] 2588번 : 곱셈 - JAVA [자바]

    [백준] 2588번 : 곱셈 - JAVA [자바]

    2020.02.09
다른 글 더 둘러보기

정보

Stranger's LAB 블로그의 첫 페이지로 이동

Stranger's LAB

  • Stranger's LAB의 첫 페이지로 이동

검색

나의 외부 링크

  • st-github

공지사항

  • 공지 - 블로그 사용 설명서

메뉴

  • 홈
  • 방명록

카테고리

  • 전체 카테고리 (267)
    • Java (5)
    • JAVA - 백준 [BAEK JOON] (177)
      • 입출력과 사칙연산 (14)
      • 조건문 (7)
      • 반복문 (11)
      • 1차원 배열 (7)
      • 함수 (3)
      • 문자열 (10)
      • 기본 수학 1 (8)
      • 기본 수학 2 (6)
      • 2차원 배열 (0)
      • 정렬 (10)
      • 재귀 (4)
      • 브루트 포스 (5)
      • 집합과 맵 (0)
      • 기하 1 (5)
      • 정수론 및 조합론 (12)
      • 백트래킹 (8)
      • 동적 계획법 1 (15)
      • 누적 합 (0)
      • 그리디 알고리즘 (5)
      • 스택 (5)
      • 큐, 덱 (7)
      • 분할 정복 (9)
      • 이분 탐색 (7)
      • 기타 문제 (17)
      • 별 찍기 문제 모음 (2)
    • C++ - 백준 [BAEK JOON] (46)
      • 입출력과 사칙연산 (14)
      • 조건문 (7)
      • 반복문 (11)
      • 1차원 배열 (7)
      • 함수 (3)
      • 문자열 (0)
      • 기타 문제 (4)
    • 자료구조 (18)
      • Java (18)
    • 알고리즘 (11)
      • Java (11)
    • 프로그래밍 기초 (6)
    • 이모저모 (2)
    • 일상의 글 (2)

최근 글

정보

ST_의 Stranger's LAB

Stranger's LAB

ST_

블로그 구독하기

  • 구독하기
  • 네이버 이웃 맺기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © ST_.

티스토리툴바