[BAEKJOON] 백준 1560: 비숍 (C#)

2024. 6. 2. 10:58IT/BaekJoon

문제 링크

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

 

 

문제

인간과 컴퓨터의 체스대결은 1997년부터 시작되었다.

지난 1997년 러시아의 체스마스터 게리 카스파로프(Garry Kasparov)가 IBM 수퍼컴퓨터 '딥블루(Deep Blue)'와의 대결에서 패한 후, 2002년 10월에는 세계 체스챔피언인 러시아의 블라디미르 크람니크(Vladimir Kramnik)가 독일의 수퍼컴퓨터 '딥프리츠(Deep Fritz)'와 두뇌대결을 벌여 무승부를 기록했다.

2003년 1월~2월 슈퍼컴퓨터와의 체스게임에 재도전한 게리 카스파로프(Garry Kasparov)는 이스라엘에서 만든 슈퍼컴퓨터 '딥주니어(Deep Junior)'와 6차례 경기를 펼쳐 '3대3'으로 무승부를 이루었다.

2003년 11월에도 카스파로프는 가상현실 프로그램개발 전문업체인 X3D 테크놀로지社가 개발한 컴퓨터 체스프로그램 'X3D 프리츠'와 체스경기를 펼쳤으나, 1승2무1패의 무승부로 끝났다.

하지만, 2008년 6월 모든 체스프로그램을 이기고 등장한 사람이 한국에 있었으니, 그 이름은 바로 "오세준" 이였다. 오세준은 컴퓨터와 사람을 모두 이겼으므로 더 이상 대적할 상대가 없었다.

세준이는 따분해진 나머지 갑자기 체스 판의 크기를 마음대로 조정하는 체스 판을 만들었다.

세준이는 N*N 크기의 체스 판에 과연 몇 개의 비숍 (BISHOP)을 세울 수 있는지 궁금해 졌다.

비숍 (BISHOP)은 자신의 위치에서 대각선 왼쪽 위, 대각선 왼쪽 아래, 대각선 오른쪽 위, 대각선 오른쪽 아래 () 이렇게 4방향으로 움직일 수 있는 말이다.

체스판의 크기가 주어졌을 때, 서로 잡아먹지 않게 최대로 비숍을 몇 개를 놓을 수 있는지 구하는 프로그램을 작성하시오.

 

 

입력

체스판의 크기 N이 주어진다. N은 10진수로 70자리 이하인 자연수이다.

 

 

출력

최대로 비숍을 몇 개 놓을 수 있는지 출력한다.

 

 

 

통과한 답안

using System.Numerics;

namespace _1560
{
    internal class Program
    {

        static void Main(string[] args)
        {
            BigInteger N = BigInteger.Parse(Console.ReadLine());

            if (N == 1)
            {
                Console.WriteLine(1);
            }
            else
            {
                Console.WriteLine(2 * N - 2);
            }
        }
    }
}

 

자연수 N이 주어졌을 때, NxN 크기의 체스판에

서로 공격할 수 없는 비숍을 최대 몇 개 놓을 수 있는지 묻는 문제이다.

 

비숍을 최대로 놓기 위해서 N을 1부터 시작해서 살펴보면,

N이 1인 경우에는 비숍을 놓을 수 있는 갯수는 1개이므로 답은 1이다.

N이 2인 경우에는 아래의 그림과 같이 2개를 놓을 수 있다.

N이 3인 경우에는 아래의 그림과 같이 4개를 놓을 수 있다.

N이 4인 경우에는 아래의 그림과 같이 6개를 놓을 수 있다.

이 경향을 살펴보면,

맨 윗줄에 N개의 비숍을 놓을 수 있고,

이 비숍들이 공격할 수 있는 범위는 대각선이므로,

맨 아랫줄 이외에는 비숍을 놓을 수 없으며,

맨 아랫줄의 맨 처음과 맨 끝은

맨 윗줄의 맨 끝과 맨 처음의 비숍이 공격 가능하므로 놓을 수 없다.

 

따라서 N이 주어졌을 때, 맨 윗줄의 N개와

맨 아랫줄의 N - 2개만큼 비숍을 놓을 수 있다.

 

문제에서 N은 10진수로 최대 70자리인 자연수이므로

BigInteger를 사용해서 문제를 풀이해야한다.