본문 바로가기
백준

[백준] 1547번 : 공 – JAVA [자바]

by Hongwoo 2022. 8. 8.
반응형

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

 

1547번: 공

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 1547번 공은 브론즈 3 난이도의 구현 및 시뮬레이션 문제이다. 이 문제에는 컵이 3개가 있다. 이 컵을 1번 컵, 2번 컵, 그리고 3번 컵이라고 부르겠다. 그리고 처음에 1번 컵 밑에 공을 둔다. 그리고 x, y가 주어지면 x번 컵과 y번 컵의 위치를 바꾼다. 공은 그대로 있는다. 이때 컵을 다 바꿨을 때 공이 몇 번 컵 밑에 있는지를 구하면 된다.

 

이 문제는 boolean형 배열을 이용해서 풀었다. 배열 사이즈가 4인 boolean형 배열 arr을 선언하고 arr [1]을 true로 초기화시켜준다. 이 뜻은 처음에 1번 컵 밑에 공이 있다는 뜻이다. 

 

그리고 for-loop을 돌려서 N개 x, y를 입력받는다. 그리고 x, y번 컵을 서로 바꿔준다. 이건 boolean형 변수 temp를 이용해서 할 수 있다. 우선 temp = arr [x]로 하고 arr [y] = arr [x], arr [x] = temp로 컵의 위치를 바꿔준다.

 

그리고 마지막에 for-loop을 돌려 배열에서 어떤 인덱스가 true인지 확인하고 true인 인덱스를 출력한다.

 

자세한 코드는 밑에서 참고할 수 있다.

 


  • 코드

 

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int m = Integer.parseInt(br.readLine());
        boolean[] arr = {false, true, false, false};  //처음 1번 컵에 공이 있다
        for (int i = 1; i <= m; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());
            //x, y번 컵을 바꿔준다
            boolean temp = arr[x];
            arr[x] = arr[y];
            arr[y] = temp;
        }
        for (int i = 1; i <= 3; i++) {
            if (arr[i]) System.out.print(i);
        }
    }
}

 

 

반응형

댓글