문제 : 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();
}
}
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 25497 - 기술 연계마스터 임스 (java) (0) | 2022.08.25 |
---|---|
[자바] 백준 25496 - 장신구 명장 임스 (java) (0) | 2022.08.25 |
[자바] 백준 25494 - 단순한 문제 (Small) (java) (0) | 2022.08.23 |
[자바] 백준 17353(펜윅트리) - 하늘에서 떨어지는 1, 2, ..., R-L+1개의 별 (java) (0) | 2022.08.23 |
[자바] 백준 10174 - 팰린드롬 (java) (0) | 2022.08.22 |
댓글