Red Glitter Pointer

 

 

15565번: 귀여운 라이언

꿀귀 라이언 인형과, 마찬가지로 꿀귀인 어피치 인형이 N개 일렬로 놓여 있다. 라이언 인형은 1, 어피치 인형은 2로 표현하자. 라이언 인형이 K개 이상 있는 가장 작은 연속된 인형들의 집합의

www.acmicpc.net

 

 

👇 내가 작성한 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());
        int[] doll = new int[N];
        st = new StringTokenizer(br.readLine());

        for(int i = 0; i < N; i++) {
            doll[i] = Integer.parseInt(st.nextToken());
        }

        int left = 0, right = 0, count = 0, min = Integer.MAX_VALUE;

        while(right < N) {
            // 현재 위치에 라이언 인형이 있다면 라이언 개수 증가
            if(doll[right] == 1) count++;

            // 라이언 인형이 K개 이상이라면, 총 인형 개수의 최솟값 갱신
            // 왼쪽 포인터의 위치에 라이언 인형이 있다면 라이언 개수 감소
            // 왼쪽 포인터 오른쪽으로 이동
            while(count >= K) {
                min = Math.min(min, right - left + 1);
                if(doll[left] == 1) count--;
                left++;
            }
            // 오른쪽 포인터 증가
            right++;
        }

        System.out.println(min == Integer.MAX_VALUE ? -1 : min);
    }
}

 

 

느낀 점 및 정리 ✍️

1. 맨 처음 설계했던 코드는, 인형을 입력받을 때 Deque에 라이언 인형의 위치에 해당하는 인덱스들을 다 저장을 하고, removeFirst를 하여 left에 해당 인덱스를 넣어주며 진행하였다. 하지만 시간 초과나서 위와 같은 방식으로 변경했다.

2. 첫 설계도 투포인터로 시작하였으나.... 이것저것 추가되며 투 포인터의 장점을 살리지 못하게 된... ㅎㅎ ^^..;

3. 설계할 때 이런 저런 예외 사항이나 고려할 것들을 생각하다보면 점점 산으로 가는 것 같다. 생각보다 단순하게 접근해도 될 듯 ㅠ ㅠ

 

 

+ Recent posts

loading