Problems & Solutions

19941 햄버거 분배

yeahzzz 2022. 8. 5. 20:14
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문을 여러개 쓸 필요도 없고 더군다나 이렇게 코드를 짜면 무한루프가 돈다. 어쩌면 당연한...