본문 바로가기
Algorithm/Baekjoon

Baekjoon 1547 공 JAVA

by Hunveloper 2022. 8. 6.
728x90

 

1547번: 공

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

www.acmicpc.net

문제

세준이는 컵 3개를 탁자 위에 일렬로 엎어놓았다. 컵의 번호는 맨 왼쪽 컵부터 순서대로 1번, 2번 3번이고, 세준이는 이 컵을 이용해서 게임을 하려고 한다.

먼저 1번 컵의 아래에 공을 하나 넣는다. 세준이는 두 컵을 고른 다음, 그 위치를 맞바꾸려고 한다. 예를 들어, 고른 컵이 1번과 2번이라면, 1번 컵이 있던 위치에 2번 컵을 이동시키고, 동시에 2번 컵이 있던 위치에 1번 컵을 이동시켜야 한다. 이때 공은 움직이지 않기 때문에, 공의 위치는 맨 처음 1번 컵이 있던 위치와 같다.

세준이는 컵의 위치를 총 M번 바꿀 것이며, 컵의 위치를 바꾼 방법이 입력으로 주어진다. 위치를 M번 바꾼 이후에 공이 들어있는 컵의 번호를 구하는 프로그램을 작성하시오.

입력

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

컵을 이동시킨 후에 공이 컵 바깥에 있는 경우는 없다.

출력

첫째 줄에 공이 들어있는 컵의 번호를 출력한다. 공이 사라져서 컵 밑에 없는 경우에는 -1을 출력한다.

풀이

문제에서 공이 사라진 경우는 -1을 출력하는데, 이 경우는 절대로 나오지 않는 경우의 수임을 생각해야 한다.

조건을 읽으면 공의 위치를 찾는 위치이다. 하지만 다르게 생각하면 첫 번째로 있는 컵의 번호를 찾는 문제이다.

처음 컵이 세팅되는 조건인 1, 2, 3으로 컵의 위치를 초기화시킨다. 그 후로 컵의 교환이 이루어진다면 컵의 내용물의 값을 바꿈으로서 컵의 위치를 저장할 수 있다.

마지막으로 반복문을 이용하여 컵이 들고 있는 번호를 찾아서 1을 들고 있는 컵의 번호가 가장 앞에 있는 번호이며, 공을 들고있는 번호라고 할 수 있다.

코드
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int [] S=new int[] {0,1,2,3};
		int m=sc.nextInt();
		for(int i=0;i<m;i++) {
			int a=sc.nextInt(), b=sc.nextInt(), t=S[a];
			S[a]=S[b];
			S[b]=t;
		}
		for(int i=1;i<4;i++)
			if(S[i]==1)
				System.out.println(i);
	}
}

 

728x90
728x90

'Algorithm > Baekjoon' 카테고리의 다른 글

Baekjoon 1159 농구 경기 JAVA  (0) 2022.08.06
Baekjoon 2399 거리의 합 JAVA  (0) 2022.08.06
Baekjoon 1063 킹 JAVA  (0) 2022.08.06
Baekjoon 9466 텀 프로젝트 JAVA  (0) 2022.08.06
Baekjoon 5635 생일 JAVA  (0) 2022.08.03

댓글