알고리즘 문제풀이/백준

[알고리즘 문제풀이] 백준 9625번 - BABBA

Jutudy 2021. 5. 12. 23:28

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

풀이

첫 글자는 A로 시작합니다. 그리고 버튼을 한 번씩 누를 때 마다, 모든 A는 B로 바뀌고, 모든 B는 BA로 바뀌게 됩니다.

1) A -> B
2) B -> BA
위 두 작업은 순차적으로 수행되는 것이 아니고, 병렬적으로 수행됩니다. 코드는 순차적으로 작성하긴 해야하는데 병렬적으로 수행되도록 구현하려면, 다음 상태 (A', B'라고 칭함) 변수를 지정하면 됩니다.

1) A -> B'
2) B -> B'A'
위와 같이 표현하면 이전 A, B값이 서로 영향을 주지 않고 다음 값을 나타낼 수 있게됩니다.

예시

ABA -> B'B'A'B' (BBAB)

  • 버튼 누르기 전 : A(2개), B(1개)
  • 버튼 누른 후 : A(1개), B(3개)

위와 같은 식으로 버튼을 누른 후 A와 B의 개수를 구하면 됩니다.

소스코드

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
        int k = Integer.parseInt(br.readLine());
        int a = 1;
        int b = 0;
        for(int i = 0; i < k; i++){
            int tb = a + b;
            int ta = b;

            a = ta;
            b = tb;
        }
        bw.write(a+" "+b);
        bw.flush();
        bw.close();
        br.close();
    }
}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

백준 17144번 - 미세먼지 안녕!  (0) 2021.04.26
백준 15686번 - 치킨 배달  (0) 2021.04.19
백준 1697번 - 숨바꼭질  (0) 2021.04.18
백준 14889번 - 스타트와 링크  (0) 2021.04.17
백준 2636번 - 치즈  (0) 2020.11.18