본문 바로가기

Algorithm

[Java] 백준 3028 : 창영마을

 

📌 문제

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

 

3028번: 창영마을

첫째 줄에 정인이가 컵을 섞은 순서가 주어진다. 이 순서는 A, B, C중 하나이고, 문제에 있는 그림을 참고하면 된다. 정인이는 컵을 최대 50번 섞는다.

www.acmicpc.net

 

📌 코드

package baekjoon;

import java.util.*;

public class Q3028 { // 창영마을
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        List<Character> list = new ArrayList<>(Arrays.asList('1', '0', '0')); // 1

        String str = scanner.next(); // 2

        for (int i = 0; i < str.length(); i++) { // 3
            if (str.charAt(i) == 'A') {
                Collections.swap(list, 0, 1);
            } else if (str.charAt(i) == 'B') {
                Collections.swap(list, 1, 2);
            } else {
                Collections.swap(list, 0, 2);
            }
        }
        System.out.println(list.indexOf('1') + 1); // 4
    }
}

 

📌 풀이

  • 어떻게 저장해야 할지 고민하다가 Collections 클래스 내부에 swap()이라는 메서드가 내포되어 있어서 쉽게 풀 수 있었다.
  • swap() 메서드는 매개변수로 3가지 항목을 받는다. (적용하고자 하는 리스트, 해당 인덱스, 해당 인덱스)
  1. 문제 내용대로 시작할 때 맨 좌측에 기억하고자 List에 Character 타입의 숫자 1로 표현을 해주었다.
  2. 문자열을 입력하고, 문자열 길이만큼 반복한다.
  3. charAt(i)로 문자를 가져와 A, B, C를 각 각 비교하고 해당 문자와 동일하면 리스트 안에 숫자 위치를 바꾼다.
  4. 출력으로 indexOf 메서드를 활용하여 1이 있으면 해당 인덱스에 + 1을 하여 출력한다.

'Algorithm' 카테고리의 다른 글

[Java] 백준 2161 : 카드 1  (0) 2022.06.28
[Java] 백준 16466 : 콘서트  (0) 2022.06.28
[Java] 백준 1032 : 명령 프롬프트  (0) 2022.06.08
[Java] 백준 1157 : 단어 공부  (0) 2022.06.04
[Java] 백준 11944 : NN  (0) 2022.04.01