코딩테스트/백준

[백준 JAVA] 2903 - 중앙 이동 알고리즘

kittae 2024. 11. 30. 20:14

 

생각보다 생각을 많이 한 문제였다.

 

처음에는 그냥 머릿속으로 슥슥 푸려고 했는데, 패턴을 찾을 듯 말 듯하다 결국 포기하고 펜을 들고 종이에 써서 생각한 문제였다.

 

시간제한과 메모리 제한은 입력 값이 매우 작아 구현에 어려움은 없다고 판단했다.

 

그렇게 나온 로직이 이렇다.

기준 3
1이 증가할 때 마다 *2 - 1

 

종이로 쓰면서 생각하니깐 바로 문제가 풀렸다!

 

[최종코드]

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int x = 3;

        for (int i = 1; i < n; i++)
            x = (x * 2) - 1;

        System.out.println((int)Math.pow(x, 2));
    }
}

 

배운점

Math.pow가 Double형으로 출력된다는 점을 처음 알았다.

그리고 생각으로 로직을 구현하는 것과 종이로 직접 쓰면서 로직을 생각하는 거와는 매우 큰 폭으로 차이가 난다는 것을 느꼈다.

이제부터 직접 쓰면서 로직을 구현하는 연습을 해야겠다!