Coding Test

백준 19941번 : 햄버거 분배

연_우리 2021. 10. 21. 22:10
반응형


일단 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
  • 네이버 블러그 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 구글 플러스 공유하기
  • 카카오톡 공유하기