문제 풀이/소프티어
[소프티어] 스마트 물류(JAVA)
27200
2025. 3. 30. 10:53
문제
https://softeer.ai/practice/6279
풀이(13분)
import java.io.*;
import java.util.*;
public class Main {
static int n, k; // n과 k
static char[] part; // 부품인지 로봇인지 저장
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
part = new char[n];
String input = br.readLine(); // 입력
for(int i = 0; i < n; i++){
part[i] = input.charAt(i); // 파싱해서 저장
}
int count = 0; // 물건을 잡을 수 있는 로봇
loop1: // 반복문 탈출을 위해
for(int i = 0; i < n; i++){
if(part[i] == 'P'){ // 로봇인 경우
for(int j = i + -1 * k; j <= i + k; j++){ // k만큼 좌우 탐색
if(j >= 0 && j < n){ // 인덱스 범위 안에 있다면
if(part[j] == 'H'){ // 물건이라면
part[j] = 'C'; // 잡은 것으로 처리
count++;
continue loop1;
}
}
}
}
}
System.out.println(count);
}
}
문제 풀이 전략
어떻게 풀이를 할까 했지만 실제로 푼 방법은 매우 간단했다.
제약조건
1 ≤ N ≤ 20,000
1 ≤ K ≤ 10
제약 조건 상 하나의 로봇에 대해 좌우 k번 모두 탐색을 한다 해도 20,000 x 11(10+본인위치)의 계산만 진행하면 되기 때문이다.
그렇기에 하나의 로봇에 대해 최대한 왼쪽부터 탐색하여 채워나가는 방식을 선택했다.
완전 탐색은 꽤나 매력적인 풀이다!