현재

[Java][BaekJoon][3003] 킹, 퀸, 룩, 비숍, 나이트, 폰 본문

알고리즘/백준

[Java][BaekJoon][3003] 킹, 퀸, 룩, 비숍, 나이트, 폰

AAAge 2023. 9. 26. 12:26

<문제 의도>

입력받은 값을 특정한 알고리즘을 통해 변환된 값을 출력할 수 있느냐 묻는 문제이다.

 

<초기 틀린 코드>

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.lang.Exception;

public class BaekJoon_Java_3003 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());
        int d = Integer.parseInt(st.nextToken());
        int e = Integer.parseInt(st.nextToken());
        int f = Integer.parseInt(st.nextToken());

        br.close();

        // 킹,퀸,룩,비숍,나이트,폰
        // 1, 1, 2, 2, 2,  8

        int king = 1;
        int queen = 1;
        int look = 2;
        int bishop = 2;
        int knight = 2;
        int pawn = 8;
        if ( a != king){ // 0이면?
            int something = king - a;
            System.err.print(something + " ");
        }else {
            System.out.print(0+ " ");
        }
        if ( b != queen){ // 0이면?
            int something = queen - b;
            System.err.print(something+ " ");
        }else {
            System.out.print(0+ " ");
        }
        if ( c != look){ // 0이면?
            int something = look - c;
            System.err.print(something+ " ");
        }else {
            System.out.print(0+ " ");
        }
        if ( d != bishop){ // 0이면?
            int something = bishop - d;
            System.err.print(something+ " ");
        }else {
            System.out.print(0+ " ");
        }
        if ( e != knight){ // 0이면?
            int something = knight - e;
            System.err.print(something+ " ");
        }else {
            System.out.print(0+ " ");
        }
        if ( f != pawn){ // 0이면?
            int something = pawn - f;
            System.err.print(something+ " ");
        }else {
            System.out.print(0+ " ");
        }
    }
}

<풀이 코드>

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.lang.Exception;

public class BaekJoon_Java_3003 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int chess[] = new int[6];
        int chessPieces [] = {1,1,2,2,2,8};

        for ( int x = 0 ; x < chess.length; x++){
            chess[x] = Integer.parseInt(st.nextToken());

        }

        br.close();
       
        for (int x= 0 ; x < chess.length; x++){
            System.out.print(chessPieces[x] -chess[x] + " ");
        }
       

    }
}

 

<풀이 과정>

이번 문제는 오류가 수정이 되지 않아서, 코드를 두개 작성하였다.

위의 코드는 vscode에서 제대로 작동하지만, 백준에서 제출하면 런타임 오류가 난다.

메모리의 크기를 초과했나 했지만 17000KB정도로 128MB를 초과하지 않았다. 그래서 결국에 오류를 해결하지 못하였고

따로 배열로 문제를 다시 풀었다.

 

<문제출처>

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

 

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

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

www.acmicpc.net