본문 바로가기
Java

[백준] 코딩테스트 문제 3003: 킹, 퀸, 룩, 비숍, 나이트, 폰

by 리슈다 2026. 2. 24.

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

import java.util.*;
import java.io.*;
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int[] chess = new  int[6];
        int[] myChess = new int[6];
        chess[0] = 1;       // 킹(1개)
        chess[1] = 1;       // 퀸(1개)
        chess[2] = 2;       // 룩(2개)
        chess[3] = 2;       // 비숍(2개)
        chess[4] = 2;       // 나이트(2개)
        chess[5] = 8;       // 폰(8개)

        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i = 0; i < 6; i++){
            myChess[i] = Integer.parseInt(st.nextToken());
            if(chess[i] != myChess[i]){
                myChess[i] = chess[i] - myChess[i];
            } else {
                myChess[i] = 0;
            }
        }

        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < 6; i++){
            sb.append(myChess[i]).append(" ");
        }

        System.out.println(sb);
    }
}

나름 생각한 대로 잘 풀리고, 답안도 맞길래 잘 썼나 싶었음

하지만 명심할 것. 지금 내가 깊은 생각 없이 술술 써지는 코드라면 어디선가 낭비가 심한 코드임을..

한 번에 맞았길래 지교수님께 당당히 답안지 들고 갔다가

뒤통수 대차게 얻어맞음

 

지교수님께 피드백 받은 버전

import java.util.*;
import java.io.*;
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 < 6; i++){
            int myChess = Integer.parseInt(st.nextToken());
            sb.append(chess[i] - myChess).append(" ");
        }

        System.out.println(sb);
    }
}

1. 생각없이 맨날 배열 생성할 때 new 키워드만 믿고 그대로 사용했는데

문제처럼 배열 값들을 다 줬을 땐 훨씬 간단하게 생성할 수 있던걸 잊고 있었다.. 벌써 저기서 코드 6줄 생략

 

2. 그리고 코드 한 번만 다시 검토해도 알 수 있었을 텐데, 보면 if문이 필요가 없음.

개수가 맞건, 틀리건 출력하는 건 그 차잇값이라서 if문 없이 chess[i]에서 가지고 있는 개수 빼주면 됨

 

3. 사실 myChess[i] 배열은 없어도 됨.

입력받자마자 차잇값 계산한 뒤에 그 값을 Stringbuilder에 넣어주면 메모리 낭비 줄여서 코드 작성 가능.. 위 2개는 코드 다시 보면 알 수 있었을 텐데 이건 바로 생각 못했을 듯.

 

 

+

아니근데 받은 충격(?)에 비해 메모리 차이가 너무 미미해서 민망..

문제가 너무 간단해서 그런가 봐요 하하하..