코딩 테스트/백준

백준 - [단계별로 풀어보기 심화 1] 3003 킹, 퀸, 룩, 비숍, 나이트, 폰

devrabbit22 2026. 3. 12. 22:05

//백준 3003 킹, 퀸, 룩, 비숍, 나이트, 폰
int[] chessData = new int[6] { 1, 1, 2, 2, 2, 8 };

string[] inputData = Console.ReadLine().Split(' ');

for(int i = 0; i < inputData.Length; i++)
{
    int input = int.Parse(inputData[i]);
    //생각했던 의사코드
    if (input == chessData[i])
    {
        Console.Write("0" + " ");
    }
    else if (input < chessData[i])
    {
        Console.Write(chessData[i] - input + " ");
    }
    else
        Console.Write("-" + (input - chessData[i]) + " ");
    
    //의사코드 이후 단순 사칙연산으로 생각했을 때 한줄 처리
    //Console.Write((chessData[i] - input) + " ");

이번 문제는 조건에 따라 결과가 달라지는 연산 문제라고 생각하여 처음에는 if문을 사용해 각 경우에 따라 다른 연산을 수행하도록 구현했다.

하지만 구현을 마친 뒤 코드를 다시 살펴보니, 체스 말의 기준 개수에서 입력값을 빼는 단순한 연산만으로도 양수와 음수를 모두 처리할 수 있다는 것을 뒤늦게 깨달았다.

즉, 부족한 경우에는 양수가 출력되고, 초과한 경우에는 음수가 출력되기 때문에 별도의 조건문 없이도 한 줄의 연산으로 문제를 해결할 수 있었다.

출력 결과 1
출력 결과 2