πŸ’»λ¬Έμ œ 풀이 - [Java] 3003. ν‚Ή, ν€Έ, 룩, λΉ„μˆ, λ‚˜μ΄νŠΈ, 폰

μ΄ν•˜μ–€Β·2024λ…„ 2μ›” 8일
0

🐣 λ°±μ€€

λͺ©λ‘ 보기
8/37

πŸ“λ¬Έμ œ 좜처 : https://www.acmicpc.net/problem/3003
πŸ“code μ €μž₯μ†Œ :
hayannn/CodingTest_Java_NKLCBHub/#3003 ν‚Ή,ν€Έ,룩,λΉ„μˆ,λ‚˜μ΄νŠΈ,폰v1
hayannn/CodingTest_Java_NKLCBHub/#3003 ν‚Ή,ν€Έ,룩,λΉ„μˆ,λ‚˜μ΄νŠΈ,폰v2


πŸ€” 문제 μš”μ•½

흰색 ν”ΌμŠ€μ˜ κ°œμˆ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, λͺ‡ 개λ₯Ό λ”ν•˜κ±°λ‚˜ λΉΌμ•Ό μ˜¬λ°”λ₯Έ μ„ΈνŠΈκ°€ λ˜λŠ”μ§€ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€.

  • 쑰건
    • μ²΄μŠ€λŠ” 총 16개의 ν”ΌμŠ€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
    • ν‚Ή 1개, ν€Έ 1개, 룩 2개, λΉ„μˆ 2개, λ‚˜μ΄νŠΈ 2개, 폰 8개의 κ΅¬μ„±μž…λ‹ˆλ‹€.

πŸ“ 예제 μž…λ ₯ 뢄석

  • 첫째쀄에 흰색 ν‚Ή, ν€Έ, 룩, λΉ„μˆ, λ‚˜μ΄νŠΈ, 폰 κ°œμˆ˜κ°€ μ£Όμ–΄μ§‘λ‹ˆλ‹€.
    • Case 1: μ–‘μˆ˜λ‘œλ§Œ 이루어져 μžˆλŠ” 경우의 좜λ ₯μž…λ‹ˆλ‹€.
    • Case 2: 음수 즉, μ œκ±°ν•΄μ•Όν•˜λŠ” ν”ΌμŠ€κ°€ μžˆλŠ” 경우의 좜λ ₯μž…λ‹ˆλ‹€.

🚨 μ£Όμ˜μ‚¬ν•­

  • 쑰건
    • μž…λ ₯받은 μˆ«μžλŠ” 0보닀 ν¬κ±°λ‚˜ κ°™κ³  10보닀 μž‘κ±°λ‚˜ 같은 μ •μˆ˜μž…λ‹ˆλ‹€.



1️⃣ μ•Œκ³ λ¦¬μ¦˜: int[] ν™œμš©

πŸ“ 풀이 κ³Όμ • 및 μ½”λ“œ

μˆœμ„œ

  • ν”ΌμŠ€ 개수 μž…λ ₯λ°›κΈ°(단, 초기 개수λ₯Ό 미리 μ„ μ–Έν•˜κΈ°)
  • ν”ΌμŠ€μ˜ μ’…λ₯˜κ°€ 6κ°€μ§€μ΄λ‹ˆ i<6 λ™μ•ˆ
    • κ²°κ³Ό 개수 = 초기 개수 - μž…λ ₯ν•œ ν”ΌμŠ€ 개수
  • κ²°κ³Ό 좜λ ₯(각각 λͺ¨μžλž€ ν”ΌμŠ€μ˜ 개수)
package baekjoon.level.L6;

import java.util.*;
public class BJ3003 {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);

        int[] Pieces = new int[6]; //μž…λ ₯ν•  개수
        for(int i = 0; i<6; i++) {
            Pieces[i] = scanner.nextInt();
        }

        int[] Chess = {1, 1, 2, 2, 2, 8}; //초기 개수

        int[] Result = new int[6]; //κ²°κ³Ό

        for(int i = 0; i<6; i++) {
            Result[i] = Chess[i] - Pieces[i]; // κ²°κ³Ό = 초기 개수 - μž…λ ₯ν•œ 개수
            System.out.print(Result[i] + " ");
        }
    }
}

μ½”λ“œ μ„€λͺ…

  • Result[i] = Chess[i] - Pieces[i];
    • Pieces[i]둜 μž…λ ₯을 받은 후에, κ·Έ 값듀을 μ΄ˆκΈ°κ°’μ—μ„œ λΉΌμ£ΌλŠ” ν˜•μ‹μœΌλ‘œ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.



2️⃣ μ•Œκ³ λ¦¬μ¦˜: "μ›λž˜μ˜ ν”ΌμŠ€ 개수 - μž…λ ₯받은 ν”ΌμŠ€ 개수"둜 λ°”λ‘œ 계산

πŸ“ 풀이 κ³Όμ • 및 μ½”λ“œ

μˆœμ„œ

  • ν”ΌμŠ€ 개수 μž…λ ₯λ°›κΈ°(단, 초기 개수λ₯Ό 미리 μ„ μ–Έν•˜κΈ°)
  • κ²°κ³Ό 개수 = 초기 개수 - μž…λ ₯ν•œ ν”ΌμŠ€ 개수
    • 각 ν”ΌμŠ€ μ’…λ₯˜λ³„λ‘œ 진행(즉, 6번)
  • κ²°κ³Ό 좜λ ₯(각각 λͺ¨μžλž€ ν”ΌμŠ€μ˜ 개수)
package baekjoon.level.L6;

import java.util.Scanner;

public class BJ3003v2 {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);

        int king = 1;
        int queen = 1;
        int rook = 2;
        int bishop = 2;
        int knight = 2;
        int pawn = 8;

        king = king - scanner.nextInt();
        queen = queen - scanner.nextInt();
        rook = rook - scanner.nextInt();
        bishop = bishop - scanner.nextInt();
        knight = knight - scanner.nextInt();
        pawn = pawn - scanner.nextInt();

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

μ½”λ“œ μ„€λͺ…

  • king = king - scanner.nextInt();
    • μœ„μ˜ 첫번째 μ•Œκ³ λ¦¬μ¦˜κ³ΌλŠ” 달리 μž…λ ₯λ°›μœΌλ©΄μ„œ λ™μ‹œμ— μ΄ˆκΈ°κ°’μ—μ„œ λ°”λ‘œ λΉΌμ£ΌλŠ” ν˜•μ‹μœΌλ‘œ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.


πŸ–¨οΈ κ²°κ³Ό 뢄석

int[] ν™œμš©

  • λ©”λͺ¨λ¦¬ : 18364KB
  • μ‹œκ°„ : 228ms
  • μ½”λ“œ 길이 : 572B

"μ›λž˜μ˜ ν”ΌμŠ€ 개수 - μž…λ ₯받은 ν”ΌμŠ€ 개수"둜 λ°”λ‘œ 계산

  • λ©”λͺ¨λ¦¬ : 19088KB
  • μ‹œκ°„ : 268ms
  • μ½”λ“œ 길이 : 636B

➑️ 두 방법 λͺ¨λ‘ λΉ„μŠ·ν•œ κ²½μš°μ§€λ§Œ, μž…λ ₯ μ‹œμ— λ°”λ‘œ λΉ„κ΅ν•˜λŠ” 것인지 μž…λ ₯을 λ°›κ³  λ‚œ ν›„ λΉ„κ΅ν•˜λŠ” 것인지 μ •λ„μ˜ μ°¨μ΄μž…λ‹ˆλ‹€.
이 λ¬Έμ œλ„ μ—­μ‹œ scanner둜 ν’€μ΄ν–ˆκΈ° λ•Œλ¬Έμ— BufferedReaderλ₯Ό μ΄μš©ν•œ 풀이도 ν•„μš”ν•΄λ³΄μž…λ‹ˆλ‹€!




뢀둝

πŸ™…β€β™€οΈ 잘λͺ»λœ μ•Œκ³ λ¦¬μ¦˜

  • μ²˜μŒμ—λŠ” 생각을 λ„ˆλ¬΄ μ–΄λ ΅κ²Œ ν•΄μ„œ switch-case문을 μ‚¬μš©ν•΄ μ•„λž˜μ™€ 같은 μ΄μƒν•œ μ½”λ“œλ₯Ό μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€.
  • 각 λ§λ³„λ‘œ μΌ€μ΄μŠ€κ°€ λ™μΌν•˜λ‹€κ³  μƒκ°ν•˜λ©΄μ„œ μ§œλ‹€λ³΄λ‹ˆ κ²°κ΅­ μ΄μƒν•œ μ•Œκ³ λ¦¬μ¦˜μ΄ λ˜μ—ˆμŠ΅λ‹ˆλ‹€πŸ₯²
    • 말의 μ’…λ₯˜μ— 따라 -> 각자 μž…λ ₯λ˜λŠ” κ°œμˆ˜μ™€ 가지고 μžˆλŠ” 말의 κ°œμˆ˜κ°€ λ™μΌν•˜κ²Œ 차이 λ‚  수 μ—†λŠ”λ° κ·Έλ ‡κ²Œ μ½”λ“œλ₯Ό κ΅¬μ„±ν•œ 것이 νŒ¨μ°©μ΄μ—ˆλ˜ κ²ƒμœΌλ‘œ λΆ„μ„ν–ˆμŠ΅λ‹ˆλ‹€.
  • ν•œλ§ˆλ””λ‘œ λͺ¨μžλž€ 말의 κ°œμˆ˜κ°€ 말의 μ’…λ₯˜μ— λ”°λΌμ„œ 달라야 ν•˜λŠ”λ°, μ΄λ ‡κ²Œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ λͺ¨λ“  말의 μˆ˜μ—μ„œ 각각 μ›ν•˜λŠ” μΌ€μ΄μŠ€μ˜ 수λ₯Ό ν†΅μ§Έλ‘œ λΉΌλŠ” κ²½μš°κ°€ λ˜λŠ” 것이죠.

μ˜ˆμ‹œ

  • μž…λ ₯ : 0 1 2 2 2 7
    -> king은 1κ°œκ°€ λͺ¨μžλžλ‹ˆλ‹€.
    -> queen은 0κ°œκ°€ λͺ¨μžλžλ‹ˆλ‹€.
    -> rook은 0κ°œκ°€ λͺ¨μžλžλ‹ˆλ‹€.
    ...
package baekjoon.level.L6;

import java.util.*;
public class BJ3003 {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);

        String piece = scanner.nextLine();
        
        //말 μ΄ˆκΈ°ν™”
        int king = 0;
        int queen = 0;
        int rook = 0;
        int bishop = 0;
        int knight = 0;
        int pawn = 0;

        for(int i = 0; i<11; i++){
            switch (i) {
            
            	// 말의 κ°œμˆ˜κ°€ λ˜‘κ°™μ€ 경우
                case 0:
                    king = 1;
                    queen = 1;
                    rook = 2;
                    bishop = 2;
                    knight = 2;
                    pawn = 8;
                    break;

				// 말의 κ°œμˆ˜κ°€ 1개 차이 λ‚˜λŠ” 경우
                case 1:
                    king = 0;
                    queen = 0;
                    rook = 1;
                    bishop = 1;
                    knight = 1;
                    pawn = 7;
                    break;

  				// 말의 κ°œμˆ˜κ°€ 2개 차이 λ‚˜λŠ” 경우
                case 2:
                    king = -1;
                    queen = -1;
                    rook = 0;
                    bishop = 0;
                    knight = 0;
                    pawn = 6;
                    break;

  				// 말의 κ°œμˆ˜κ°€ 3개 차이 λ‚˜λŠ” 경우
                case 3:
                    king = -2;
                    queen = -2;
                    rook = -1;
                    bishop = -1;
                    knight = -1;
                    pawn = 5;
                    break;

  				// 말의 κ°œμˆ˜κ°€ 4개 차이 λ‚˜λŠ” 경우
                case 4:
                    king = -3;
                    queen = -3;
                    rook = -2;
                    bishop = -2;
                    knight = -2;
                    pawn = 4;
                    break;

  				// 말의 κ°œμˆ˜κ°€ 5개 차이 λ‚˜λŠ” 경우
                case 5:
                    king = -4;
                    queen = -4;
                    rook = -3;
                    bishop = -3;
                    knight = -3;
                    pawn = 3;
                    break;

  				// 말의 κ°œμˆ˜κ°€ 6개 차이 λ‚˜λŠ” 경우
                case 6:
                    king = -5;
                    queen = -5;
                    rook = -4;
                    bishop = -4;
                    knight = -4;
                    pawn = 2;
                    break;

  				// 말의 κ°œμˆ˜κ°€ 7개 차이 λ‚˜λŠ” 경우
                case 7:
                    king = -6;
                    queen = -6;
                    rook = -5;
                    bishop = -5;
                    knight = -5;
                    pawn = 1;
                    break;
                    
                   
  				// 말의 κ°œμˆ˜κ°€ 8개 차이 λ‚˜λŠ” 경우
                case 8:
                    king = -7;
                    queen = -7;
                    rook = -6;
                    bishop = -6;
                    knight = -6;
                    pawn = 0;
                    break;

  				// 말의 κ°œμˆ˜κ°€ 9개 차이 λ‚˜λŠ” 경우
                case 9:
                    king = -8;
                    queen = -8;
                    rook = -7;
                    bishop = -7;
                    knight = -7;
                    pawn = -1;
                    break;
            }
        }
        System.out.print(king +" "+ queen +" " + rook+ " " + bishop + " " + knight + " " + pawn);
    }
}
profile
μ–Έμ  κ°€ λ‚΄ μ½”λ“œλ‘œ 세상에 κΈ°μ—¬ν•  수 μžˆλ„λ‘, BE&Data Science 개발 기둝 λ…ΈνŠΈβ˜˜οΈ

0개의 λŒ“κΈ€