package baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class b19941 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
String str = br.readLine();
char[] arr = new char[N];
boolean check[] = new boolean[N];
for(int i = 0; i < N; i++) {
arr[i] = str.charAt(i);
}
int count = 0;
for(int i = 0; i < N; i++) {
if(arr[i]=='P') {
int startId = Math.max(i-K, 0);
int endId = Math.min(i+K, N-1);
for(int id = startId; id <= endId; id++) {
if(arr[id]=='H' && !check[id]) {
check[id] = true;
count++;
break;
}
}
}
}
System.out.println(count);
}
}
*char 배열 입력 받을 때 bufferedReader.readLine으로 한줄 전체 String으로 입력 받고
배열에 저장할 때 charAt 메소드로 char 형태로 저장시켜준다.
그리고 Math.min / Math.max 메소드를 사용하면 while(id < N)과 같은 while문을 쓰지 않고도 범위를 0부터 N-1까지로 제한할 수 있다.
**Math.min(a,b) : a와 b 중에서 더 작은 수 리턴
Math.max(a,b) : a와 b 중에서 더 큰 수 리턴.
int count = 0;
for(int i = 0; i < N; i++) {
if(arr[i]=='P') {
for(int id = i-K; id <= i+K; id++){
while(id < N){
if(arr[id]=='H' && !check[id]) {
check[id] = true;
count++;
break;
}
}
break;
}
}
}
그러니까 이런 식으로 while문, if문을 여러개 쓸 필요도 없고 더군다나 이렇게 코드를 짜면 무한루프가 돈다. 어쩌면 당연한...
'Problems & Solutions' 카테고리의 다른 글
10816 숫자 카드2 (0) | 2022.08.05 |
---|---|
1920 수 찾기 (0) | 2022.08.05 |
7795 먹을 것인가 먹힐 것인가 (0) | 2022.07.30 |
9095 1, 2, 3 더하기 (0) | 2022.07.30 |
11441 합 구하기 (0) | 2022.07.26 |