링크 https://www.acmicpc.net/problem/1547
문제 설명
풀이 과정
두 가지 방법이 떠올랐는데, 공 위치를 담는 변수 A를 두고 if 문으로 그 때 그 때, A에 컵번호를 넣는 방법이 있고 arrayList와 Collections.swap 메소드를 이용하여 푸는 방법이 생각났다. 두 가지 방법이 메모리나 시간을 얼마나 소요하는지 확인해보고 싶어서 두 가지 모두 제출해봤다.
1) arrayList, Collections.swap() 메소드 활용
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Integer> cups = new ArrayList<>();
cups.add(1);
cups.add(0);
cups.add(0);
cups.add(0);
int cnt = sc.nextInt();
for (int i = 1; i <= cnt; i++) {
int cup1 = sc.nextInt();
int cup2 = sc.nextInt();
Collections.swap(cups, cup1-1, cup2-1);
}
System.out.println(cups.indexOf(1) + 1);
}
}
문제를 읽어 보면, 먼저 1번 컵에 공을 넣는다고 되어있기 때문에 arrayList에 1, 0, 0, 0 순서대로 넣었다.
그 다음, Collections.swap() 메소드를 활용하여 1이라는 값을 배열 안에서 옮겨주고, 마지막에 배열에서 1이라는 값이 들어있는 공간을 찾아서 출력했다. 알다시피, 배열은 0부터 시작하므로 코드를 보면 swap을 할 때 -1을 해주고 출력할 때는 +1을 해줬다.
2) 변수, if문 활용
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int cnt = sc.nextInt();
int ball = 1; //공이 들어있는 컵번호
for (int i =1; i <= cnt; i++) {
int cup1 = sc.nextInt();
int cup2 = sc.nextInt();
if (cup1 == ball) {
ball = cup2;
} else if (cup2 == ball) {
ball = cup1;
}
}
System.out.println(ball);
}
}
이번에는 번거롭게 ArrayList, Collections.swap() 메소드를 쓰지 않고, 가장 기본적인 변수와 if문을 사용하여 풀어보았다.
ball이라는 변수에 컵번호를 담고 입력받을 두 개의 컵번호를 각각 cup1, cup2 라고 정의했다.
만약 3 1을 입력받았으면 3번컵과 1번컵이 서로 위치가 바뀌기 때문에, cup1이 공이 담겨있는 컵번호라면 옮겨질 위치인 cup2의 값을 ball 변수에 담아준다. 반대로 cup2가 공이 담겨있는 컵번호라면 cup1의 값을 ball 변수에 담아준다.
결과
결과는 둘 다 통과되었다. 두 가지 방법의 메모리 크기나 소요 시간을 체크해봤는데 별 차이가 없었다..ㅎㅎ..
문제를 읽고 여러 가지 방법이 떠오른다는게 참 좋았다. 점점 시간이 지나서 나중에는 여러 가지 방법이 떠오르고 그 방법들 중 최적의 방법을 선택할 수 있는 실력까지 올라가고 싶고 그 때까지 꾸준히 해야겠다.
'✏️ BOJ' 카테고리의 다른 글
[프로그래머스] 크레인 인형뽑기 게임 - Java(자바) (0) | 2023.06.22 |
---|---|
[백준] 2309 일곱 난쟁이 - Java(자바) (0) | 2023.04.24 |
[백준] 2490 윷놀이 - Java(자바) (0) | 2023.03.21 |
[백준] 1152 단어의 개수 - Java(자바) (1) | 2023.03.20 |