문제 풀이/소프티어

[소프티어] 스마트 물류(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+본인위치)의 계산만 진행하면 되기 때문이다.

그렇기에 하나의 로봇에 대해 최대한 왼쪽부터 탐색하여 채워나가는 방식을 선택했다.

 

완전 탐색은 꽤나 매력적인 풀이다!