BOJ14465 소가 길을 건너간 이유 5

2024. 3. 5. 18:19· Problem Solving/투포인터
목차
  1. 슬라이딩 윈도우 방식
  2. 누적합 방식

https://www.acmicpc.net/problem/14465

 

14465번: 소가 길을 건너간 이유 5

첫 줄에 N, K, B (1 ≤ B,K ≤ N)가 주어진다. 그 다음 B줄에는 고장난 신호등의 번호가 하나씩 주어진다.

www.acmicpc.net

이문제는 투포인터( 슬라이딩 윈도우) 또는 누적합을 이용하여 풀 수 있다.

 

 

슬라이딩 윈도우 방식

import java.util.*;
import java.io.*;
public class Main
{
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String[] input1 = br.readLine().split(" ");
        int n = Integer.parseInt(input1[0]);
        int k = Integer.parseInt(input1[1]);
        int b = Integer.parseInt(input1[2]);
        boolean[] signal = new boolean[n+1];
        Arrays.fill(signal, true);
        for(int i=0 ; i<b; i++){
            signal[Integer.parseInt(br.readLine())] = false;
        }
        
        
        
        int count=0;
        for(int left =1;left<k+1;left++){
            count+= signal[left]? 1:0;
            
        }
        int max = count;
        for(int left =2; left<n-k+2; left++){
            if(signal[left-1]) count--;
            if(signal[left-1+k]) count++;
            max = Math.max(max,count);
        }
        
        
        System.out.println(k-max);
	}
}

 

 

누적합 방식

 

import java.util.Scanner;

class Main
{
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();
        int K = sc.nextInt();
        int B = sc.nextInt();
        boolean[] isBroken = new boolean[N + 1];
        while (B-- > 0) {
            int idx = sc.nextInt();
            isBroken[idx] = true;
        }

        int[] accBroken = new int[N + 1];
        for (int i = 1; i <= N; i++)
            accBroken[i] = accBroken[i - 1] + (isBroken[i] ? 1 : 0);

        int ans = K;
        for (int i = 1; i <= N - K + 1; i++)
            ans = Math.min(ans, accBroken[i + K - 1] - accBroken[i - 1]);
        System.out.println(ans);
    }
}

'Problem Solving > 투포인터' 카테고리의 다른 글

BOJ10025 게으른 백곰  (0) 2024.03.05
슬라이딩 윈도우 개념  (0) 2024.03.05
BOJ16472 고냥이  (0) 2024.03.04
BOJ15831 준표의 조약돌  (1) 2024.03.04
BOJ17609 회문  (0) 2024.03.04
  1. 슬라이딩 윈도우 방식
  2. 누적합 방식
'Problem Solving/투포인터' 카테고리의 다른 글
  • BOJ10025 게으른 백곰
  • 슬라이딩 윈도우 개념
  • BOJ16472 고냥이
  • BOJ15831 준표의 조약돌
윤재에요
윤재에요
윤재에요
yunzae.log
윤재에요
전체
오늘
어제
  • 분류 전체보기 (438) N
    • Computer Science (115)
      • 데이터베이스 (50)
      • 네트워크 (18)
      • 소프트웨어 공학 (1)
      • 알고리즘 (10)
      • 자료구조 (9)
      • 컴퓨터구조 (0)
      • 운영체제 (0)
      • 데이터 통신 (16)
      • 프로그래밍언어론 (11)
    • Project (20)
      • 후크(Flutter) (1)
      • BDSR로그북(App,BackEnd) (2)
      • 나만의 주점(STM32,Arduino,androi.. (9)
      • 공다(App,BackEnd) (2)
      • 카카오쇼핑 클론코딩 (4)
      • 암호화폐자동매매 (2)
    • Problem Solving (208) N
      • 자바 문법 (20)
      • 파이썬 문법,함수 (6)
      • 그리디 (5)
      • 구현 (43)
      • DFS (3)
      • BFS (17)
      • 정렬 (15)
      • 이진 탐색 (16)
      • 다이나믹 프로그래밍 (6)
      • 최단 경로 (5)
      • 그래프 (1)
      • 자료구조 (5)
      • 투포인터 (15)
      • SQL (44) N
      • 구간합 (7)
    • I leaned (78)
      • 스프링,스프링부트 (31)
      • Git (6)
      • JAVA (5)
      • Etc (30)
    • 취업 (15)
      • PT면접 (6)
      • 기술면접 (9)
      • 인성면접 (0)
    • log (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • 최단거리
  • 다이나믹프로그래밍
  • 카카오테크캠퍼스
  • 효율적인화폐구성
  • 계수정렬
  • 그리디
  • 이것이코딩테스트다
  • 파이썬
  • 먀
  • 이것이 코딩테스트다
  • Relationship model
  • weak entity
  • 이것이 코딩테스트다.
  • 데이터베이스
  • 참조 무결성
  • 개미전사
  • 최단 거리
  • 다익스트라
  • 플로이드 워셜
  • 교환정렬
  • 다이어그램
  • 재시도
  • DP
  • 다이나믹
  • 기수정렬
  • 부품찾기
  • UML
  • 제약 사항
  • 힙큐
  • E-R Model

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
윤재에요
BOJ14465 소가 길을 건너간 이유 5
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.