본문 바로가기
PS/BOJ

[자바] 백준 25495 - 에어팟 (java)

by Nahwasa 2022. 8. 24.

 문제 : boj25495


 

필요 알고리즘 개념

  • 시뮬레이션 (구현)
    • 문제에서 제시된 대로 구현만 할 수 있다면 풀 수 있다.

※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.

 


 

풀이

  로직을 정리해보면 다음과 같다. 우선 이전 핸드폰 종류(1~9)는 bf 변수에 담아둘 것이다. 그리고 현재 배터리 소모량은 cnt라는 변수로 표현할 것이다. 누적 배터리 소모량은 sum으로 표현한다.

 

1. bf=0(존재하지 않는 번호), sum=0으로 초기화 해둔다.

2. n개의 입력받는동안 3~5를 반복한다.

3. 현재 입력받은 핸드폰 종류 cur과 bf가 다르다면 cnt=1 (이미 연결되어 있는 핸드폰에 다시 연결을 시도한게 아니므로 소모량은 초기화), bf=cur로 변경한다.

4. cnt의 2배를 sum에 더해준다 (그럼 이전과 동일한 녀석이었다면 계속 2배만큼 소모하게 되고, 다른 녀석이었다면 cnt=1에서 x2해서 2가 된다)

5. sum이 100 이상이라면 sum을 0으로 변경하고 cnt를 다시 1로 변경해준다.

 


 

코드 : github

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int sum = 0;
        int bf = 0;
        int cnt = 1;
        StringTokenizer st = new StringTokenizer(br.readLine());
        while (n-->0) {
            int cur = Integer.parseInt(st.nextToken());
            if (cur != bf) {
                cnt = 1;
                bf = cur;
            }
            cnt*=2;
            sum += cnt;
            if (sum >= 100) {
                sum = 0;
                cnt = 1;
            }
        }
        System.out.println(sum);
    }

    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

댓글