๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
2๏ธโƒฃ Java/Problem Solving

[Java Algorithm] ํšŒ์ „ ์ดˆ๋ฐฅ BOJ #15961

by seolhee2750 2022. 10. 11.
๋ฌธ์ œ

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

 

15961๋ฒˆ: ํšŒ์ „ ์ดˆ๋ฐฅ

์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ํšŒ์ „ ์ดˆ๋ฐฅ ๋ฒจํŠธ์— ๋†“์ธ ์ ‘์‹œ์˜ ์ˆ˜ N, ์ดˆ๋ฐฅ์˜ ๊ฐ€์ง“์ˆ˜ d, ์—ฐ์†ํ•ด์„œ ๋จน๋Š” ์ ‘์‹œ์˜ ์ˆ˜ k, ์ฟ ํฐ ๋ฒˆํ˜ธ c๊ฐ€ ๊ฐ๊ฐ ํ•˜๋‚˜์˜ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. ๋‹จ, 2 ≤ N ≤ 3,000,000, 2 ≤ d ≤ 3,000, 2

www.acmicpc.net

 

๋‚ด ๋ฌธ์ œ ํ’€์ด
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	
	static int n, d, k, c; // ์ ‘์‹œ ์ˆ˜, ์ดˆ๋ฐฅ ์ข…๋ฅ˜, ์—ฐ์†ํ•ด์„œ ๋จน๋Š” ์ ‘์‹œ ์ˆ˜, ์ฟ ํฐ
	static int susi[], ate[]; // ๋ฒจํŠธ์— ๋†“์ธ ์ดˆ๋ฐฅ ์ข…๋ฅ˜, ์ดˆ๋ฐฅ ๋ณ„ ๋จน์€ ๊ฐœ์ˆ˜
	static int cnt, ans;
	
	public static void main(String[] args) throws Exception {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		
		st = new StringTokenizer(in.readLine());
		n = Integer.parseInt(st.nextToken());
		d = Integer.parseInt(st.nextToken());
		k = Integer.parseInt(st.nextToken());
		c = Integer.parseInt(st.nextToken());
		susi = new int[n];
		ate = new int[d+1];
		for(int i = 0; i < n; i++) {
			susi[i] = Integer.parseInt(in.readLine());
		}
		
		eat();
		System.out.println(ans);
	}
	
	public static void eat() { // ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ
		for(int i = 0; i < k; i++) {
			if(ate[susi[i]] == 0) ans++;
			ate[susi[i]]++;
		}
		cnt = ans;
		ans = (ate[c] > 0) ? cnt : cnt + 1;
		
		int start = k;
		while(start != n-1+k) {
			if(--ate[susi[(start - k) % n]] == 0) cnt--;
			if(ate[susi[start % n]]++ == 0) cnt++;
			ans = Math.max(ans, (ate[c] > 0) ? cnt : cnt + 1);
			start++;
		}
	}
}

๐Ÿ‘‰ ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ๋ฌธ์ œ

๊ฐ€์žฅ ๋จผ์ € ์ฒซ ๋ฒˆ์งธ ์ ‘์‹œ๋ถ€ํ„ฐ k๊ฐœ์˜ ์ ‘์‹œ๋ฅผ ๋จน์–ด์ฃผ์—ˆ๋‹ค. ๋จน์€ ์ดˆ๋ฐฅ์€ ate ๋ฐฐ์—ด์— ํ‘œ์‹œํ–ˆ๊ณ ,

๋งŒ์•ฝ ํ•ด๋‹นํ•˜๋Š” ์ ‘์‹œ์˜ ์ดˆ๋ฐฅ์ด ์ฒ˜์Œ ๋จน๋Š” ์ดˆ๋ฐฅ์ผ ๊ฒฝ์šฐ์—๋Š” ans ๋ณ€์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ์ฃผ์—ˆ๋‹ค.

 

cnt ๋ณ€์ˆ˜์— ans ๊ฐ’์„ ๋‹ด์•„๋†“๊ณ , ์ฟ ํฐ์— ํ•ด๋‹นํ•˜๋Š” ์ดˆ๋ฐฅ์„ ๋จน์—ˆ๋‹ค๋ฉด ans๋ฅผ ๊ทธ๋Œ€๋กœ ๋†”๋‘์—ˆ๊ณ 

์ฟ ํฐ์— ํ•ด๋‹นํ•˜๋Š” ์ดˆ๋ฐฅ์„ ๋จน์ง€ ์•Š์•˜๋‹ค๋ฉด ans๋ฅผ 1 ์ฆ๊ฐ€์‹œ์ผฐ๋‹ค. (๋” ๋งŽ์€ ์ข…๋ฅ˜์˜ ์ดˆ๋ฐฅ ๋จน์„ ์ˆ˜ ์žˆ์Œ)

 

๋‘ ๋ฒˆ์งธ ํƒ์ƒ‰๋ถ€ํ„ฐ๋Š” while์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ๋ฐฉ์‹์„ ์ ์šฉํ–ˆ๋‹ค.

(start - k) % n ์—ฐ์‚ฐ์„ ํ†ตํ•ด์„œ ํ•œ ์นธ์”ฉ ๋’ค๋กœ ๋‹น๊ธฐ๋ฉฐ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๋‹ค.

 

๋‘ ๊ฐœ์˜ if ์กฐ๊ฑด๋ฌธ์„ ํ™•์ธํ•ด๋ณด๋ฉด,

๋จน์€ ์ดˆ๋ฐฅ  ์ค‘ ์ฒซ ๋ฒˆ์งธ ์ดˆ๋ฐฅ์„ ๋ฒ„๋ฆฌ๋Š”๋ฐ, ๊ทธ ์ดˆ๋ฐฅ์ด ๋” ์ด์ƒ ๋จน์ง€ ์•Š์€ ์ดˆ๋ฐฅ์ด ๋  ๊ฒฝ์šฐ cnt๋ฅผ ๊ฐ์†Œ,

์ดˆ๋ฐฅ ํ•˜๋‚˜๋ฅผ ์ƒˆ๋กœ ๋จน๋Š”๋ฐ ๊ทธ ์ดˆ๋ฐฅ์ด ๋จน์€์  ์—†๋Š” ์ดˆ๋ฐฅ์ผ ๊ฒฝ์šฐ์—๋Š” cnt๋ฅผ ์ฆ๊ฐ€์‹œ์ผฐ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ ans๋ฅผ Max ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธ ์‹œ์ผœ์ฃผ์—ˆ๊ณ ,

start๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ์„œ ๊ทธ ๋‹ค์Œ ์ดˆ๋ฐฅ์„ ๋จน์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์—ˆ์œผ๋ฉฐ,

๋งŒ์•ฝ ๋ชจ๋“  ์ดˆ๋ฐฅ ํƒ์ƒ‰์— ์™„๋ฃŒํ–ˆ๋‹ค๋ฉด while๋ฌธ์„ ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ๋‹ค.

 

๐Ÿ’ก ํ”ผ๋“œ๋ฐฑ
  • ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ๋ฌธ์ œ๋ฅผ ๋งŽ์ด ์•ˆํ’€์–ด๋ณด๊ธฐ๋„ ํ–ˆ๊ณ , ์ •๋ง ์˜ค๋žœ๋งŒ์— ํ’€์–ด๋ด์„œ ๋ฐ”๋กœ ๋– ์˜ค๋ฅด์ง€ ์•Š์•˜์ง€๋งŒ
    ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์šด ๊ฐœ๋…์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„์Šทํ•œ ๋ฌธ์ œ๋“ค์„ ๋ช‡ ๋ฒˆ ๋” ํ’€์–ด๋ณด๋ฉด ๋” ์ต์ˆ™ํžˆ ํ’€ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

๋Œ“๊ธ€