반응형
일단 P를 먼저 찾고
P의 -K ~ +K 중에 H가 있는지 확인
* 만약 P가 맨 앞이나 맨 뒤에 위치해있다면
-K ~ +K 그대로 검색하면 없는 인덱스가 조회된다
따라서 start와 end변수를 선언해서
p의 인덱스 -K 했을 때 0 이하이면 start는 무조건 0으로 고정,
P의 인덱스 +K 했을 때 N 이상이면 end는 무조건 N-1로 고정한 다음
start와 end 사이에서 H를 찾는다!
또, 이미 먹은 햄버거는 카운트하지 않으니 아예 글자를 변경해준다
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Scanner;
class Hamburger {
int N=0;
int K=0;
char[] arr;
int result=0;
void scan_input(String inputed){
InputStream in = new ByteArrayInputStream(inputed.getBytes());
System.setIn(in);
}
void scan(){
Scanner scan = new Scanner(System.in);
N = scan.nextInt();
K = scan.nextInt();
arr = new char[N];
arr = scan.next().toCharArray();
scan.close();
}
void process(){
//P 좌우로 K만큼 H가 있으면 먹을 수 있음
//이미 먹은 햄버거는 카운트 안함 => 먹은 햄버거는 글자변경
for (int i = 0; i < arr.length; i++) {
if(arr[i] == 'P'){
//P 에서 -K~+K했을 때 인덱스가 없는 경우 start, end지점 설정
int start = i-K;
int end = i+K;
if (start <= 0) {
start = 0;
}
if (end >= N){
end = N-1;
}
//System.out.println("i="+i+", start="+start+", end="+end);
//P의 -K~+K까지 살펴보기
for (int j = start; j <= end; j++) {
if(arr[j] == 'H'){
result++;
arr[j] = '_';
break;
}
}
//System.out.print(arr);
//System.out.println(" "+result);
}
}
System.out.println(result);
}
}
public class Main {
public static void main(String[] args) {
Hamburger ham = new Hamburger();
ham.scan();
ham.process();
}
}
@Test
void test1() {
Hamburger ham = new Hamburger();
ham.scan_input(
"20 1\n" +
"HHPHPPHHPPHPPPHPHPHP"
);
ham.scan();
ham.process();
}
@Test
void test2() {
Hamburger ham = new Hamburger();
ham.scan_input(
"20 2\n" +
"HHHHHPPPPPHPHPHPHHHP"
);
ham.scan();
ham.process();
}
#백준 #백준문제풀이 #코딩테스트 #백준19941번
반응형
'Coding Test' 카테고리의 다른 글
백준 1026번 : 보물 (0) | 2021.10.27 |
---|---|
백준 1946번 : 신입사원 (0) | 2021.10.26 |
백준 2217번 : 로프 (시간초과 해결과정) (0) | 2021.10.25 |
백준 2839번 : 설탕 배달 (2) | 2021.10.23 |
백준 9009번 : 피보나치 (0) | 2021.10.20 |