공부하기/백준

[Java] 백준 풀기 1547 - 공

XEV 2024. 3. 8. 23:14

자바 백준 1547번

브론즈 3

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

 

1547번: 공

첫째 줄에 컵의 위치를 바꾼 횟수 M이 주어지며, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 컵의 위치를 바꾼 방법 X와 Y가 주어지며, X번 컵과 Y번 컵의 위치를 서로 바꾸는 것

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 구현, 시뮬레이션

 

 

 

 

 

 

코드 풀이

import java.util.Scanner;
import java.util.HashMap;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // 컵의 위치를 바꾼 횟수 입력
        int M = sc.nextInt();
        
        // CupGame 객체 생성
        CupGame cupGame = new CupGame();
        
        // 컵의 위치를 M번 바꾼 후의 상태 설정
        for (int i = 0; i < M; i++) {
            int X = sc.nextInt();
            int Y = sc.nextInt();
            
            // 컵 위치 변경 메서드 호출
            cupGame.moveCups(X, Y);
        }
        
        // 공이 들어있는 컵의 번호 출력
        System.out.println(cupGame.getBallPosition());
    }
}

// 컵 게임 클래스
class CupGame {
    // 컵 상태 저장을 위한 해시맵
    private HashMap<Integer, Integer> cups;

    // constructor 초기 컵 위치 설정
    public CupGame() {
        cups = new HashMap<>();
        cups.put(1, 1);  // 1번 컵에 공이 들어있음
        cups.put(2, 0);
        cups.put(3, 0);
    }

    // 컵 위치 변경 메서드
    public void moveCups(int X, int Y) {
        int temp = cups.get(X);  // X번 컵의 상태를 임시 저장
        cups.put(X, cups.get(Y));  // Y번 컵의 상태를 X번 컵에 저장
        cups.put(Y, temp);  // 임시 저장된 X번 컵의 상태를 Y번 컵에 저장
    }

    // 공이 들어있는 컵의 번호 반환 메서드
    public int getBallPosition() {
        for (int cup : cups.keySet()) {
            if (cups.get(cup) == 1) {  // 컵의 상태가 1인 경우
                return cup;  // 해당 컵의 번호 반환
            }
        }
        return -1;  // 공이 컵 안에 없는 경우
    }
}