문제 : https://www.acmicpc.net/problem/22114
22114번: 창영이와 점프
창영이는 버스에서 내린 뒤 회사로 걸어가고 있다. 창영이가 걸어가는 길은 대부분 회색 보도블럭으로 포장되어 있는데, 가끔씩 빨간 보도블럭이 놓여있을 때가 있다. 창영이는 어린 시절 빨간
www.acmicpc.net
문제 요약 : 최대로 밟을 수 있는 블록 개수 출력
| 입력 | 출력 |
| 2 ≤ N(블럭 개수) ≤ 100000 1 ≤ K(보폭), L(블럭 사이 거리) ≤ 100 |
임의의 점프를 한번 할 수 있을 때 최대로 밟을 수 있는 블럭 개수 출력 |
JAVA
소스코드 : https://github.com/cbkpar/BOJ/blob/main/boj_22114.java
| 채점 번호 | 아이디 | 문제 번호 | 결과 | 메모리 | 시간 | 언어 | 코드 길이 |
| 30869039 | cbkpar | 22114 | 맞았습니다!! | 26132KB | 316ms | Java 11 | 929B |
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n,k,i,m;
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
int[] arr = new int[n];
st = new StringTokenizer(br.readLine());
for(i=0;i<n-1;i++) arr[i] = Integer.parseInt(st.nextToken());
int[][] dp = new int[n][2];
dp[0][0] = dp[0][1] = 1;
for(i=0;i<n-1;i++) {
if(arr[i]<=k) {
dp[i+1][0] = dp[i][0] + 1;
dp[i+1][1] = dp[i][1] + 1;
}else {
dp[i+1][0] = 1;
dp[i+1][1] = dp[i][0] + 1;
}
}
m = 0;
for(i=0;i<n;i++) {
m = Math.max(m, dp[i][0]);
m = Math.max(m, dp[i][1]);
}
System.out.println(m);
}
}
밟은 블럭의 개수를 점프를 사용했는지와 안 했는지로 구분한다.
초기값을 1로 둔 뒤에 블럭을 다음과 같이 차례대로 계산한다.
블럭 사이의 거리가 보폭보다 같거나 짧은 경우
점프 미사용[i] = 점프 미사용[i-1] + 1
점프 사용[i] = 점프 사용[i-1] = 1
블럭 사이의 거리가 보폭보다 클 경우
점프 미사용[i] = 1
점프 사용[i] = 점프 미사용[i-1] + 1
그 후 배열의 가장 큰 값을 출력하면 된다.
예제 )
7 3
2 3 1 5 3 3


'백준온라인' 카테고리의 다른 글
| [백준온라인] 5698번 Tautogram (0) | 2021.07.13 |
|---|---|
| [백준온라인] 22115번 창영이와 커피 (0) | 2021.07.12 |
| [백준온라인] 22113번 창영이와 버스 (0) | 2021.07.10 |
| [백준온라인] 1269번 대칭 차집합 (0) | 2021.07.09 |
| [백준온라인] 11536번 줄 세우기 (0) | 2021.07.08 |