๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

[๋ฐฑ์ค€] 1966๋ฒˆ: ํ”„๋ฆฐํ„ฐ ํ(๊ตฌํ˜„, ํ)

by ์ฃผ๋ฐœ2 2020. 3. 24.
๋ฐ˜์‘ํ˜•

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

 

1966๋ฒˆ: ํ”„๋ฆฐํ„ฐ ํ

๋ฌธ์ œ ์—ฌ๋Ÿฌ๋ถ„๋„ ์•Œ๋‹ค์‹œํ”ผ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋ฆฐํ„ฐ ๊ธฐ๊ธฐ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์ธ์‡„ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ธ์‡„ ๋ช…๋ น์„ ๋ฐ›์€ ‘์ˆœ์„œ๋Œ€๋กœ’, ์ฆ‰ ๋จผ์ € ์š”์ฒญ๋œ ๊ฒƒ์„ ๋จผ์ € ์ธ์‡„ํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์„œ๊ฐ€ ์Œ“์ธ๋‹ค๋ฉด Queue ์ž๋ฃŒ๊ตฌ์กฐ์— ์Œ“์—ฌ์„œ FIFO - First In First Out - ์— ๋”ฐ๋ผ ์ธ์‡„๊ฐ€ ๋˜๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ƒ๊ทผ์ด๋Š” ์ƒˆ๋กœ์šด ํ”„๋ฆฐํ„ฐ๊ธฐ ๋‚ด๋ถ€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜์˜€๋Š”๋ฐ, ์ด ํ”„๋ฆฐํ„ฐ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ธ์‡„๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค. ํ˜„์žฌ Queue์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๋ฌธ์„œ์˜ ‘์ค‘์š”๋„’๋ฅผ

www.acmicpc.net

์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		int tc = Integer.parseInt(bf.readLine());
		for(int t=0; t<tc; t++) {
			StringTokenizer st = new StringTokenizer(bf.readLine());
			int N = Integer.parseInt(st.nextToken());	// ๋ฌธ์„œ์˜ ์ˆ˜
			int x = Integer.parseInt(st.nextToken());	// ๋ช‡๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜์—ˆ๋Š”์ง€ ๊ถ๊ธˆํ•œ ๋ฌธ์„œ
			int ans = 0;
			st = new StringTokenizer(bf.readLine());	// ๋ฌธ์„œ์˜ ์ค‘์š”๋„
			LinkedList<Integer> q = new LinkedList<Integer>();
			for(int i=0; i<N; i++) 
				q.add(Integer.parseInt(st.nextToken()));	// ํ์— ๋ฌธ์„œ์˜ ์ค‘์š”๋„ ์ถ”๊ฐ€
			
			while(!q.isEmpty()) {
				boolean flag = true;	// ํ˜„์žฌ ๋ฌธ์„œ๋ณด๋‹ค ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ฌธ์„œ๊ฐ€ ์žˆ๋Š”์ง€ ์ฒดํฌ
				for(int i=1; i<q.size(); i++) {
					if(q.peek() < q.get(i)) {	// ํ˜„์žฌ ๋ฌธ์„œ๋ณด๋‹ค ์ค‘์š”๋„๊ฐ€ ๋†’์„๊ฒฝ์šฐ
						flag = false;
						break;
					}
				}
				
				// ๋ฌธ์„œ๋‚ด ํ˜„์žฌ ๋ฌธ์„œ๋ณด๋‹ค ์ค‘์š”๋„๊ฐ€ ๋†’์€๊ฒŒ ์—†๋Š”๊ฒฝ์šฐ
				if(flag) {
					ans ++;		// ํ˜„์žฌ ๋ชฉ๋ก ์ธ์‡„ +1
					q.poll();	// ํ˜„์žฌ ๋ชฉ๋ก ์ธ์‡„ํ•ด์„œ ์ œ๊ฑฐํ•˜๊ธฐ
					if(x == 0) 	break;	// ํ˜„์žฌ ์ธ์‡„ํ•˜๋ ค๋Š” ๋ฌธ์„œ๊ฐ€ ๊ถ๊ธˆํ•œ ๋ฌธ์„œ์ธ๊ฒฝ์šฐ
					else 	x --;		// ํ˜„์žฌ ์ธ์‡„ํ•˜๋ ค๋Š” ๋ฌธ์„œ๊ฐ€ ๊ถ๊ธˆํ•œ ๋ฌธ์„œ๊ฐ€ ์•„๋‹Œ๊ฒฝ์šฐ
					
				}
				
				// ๋ฌธ์„œ๋‚ด ํ˜„์žฌ ๋ฌธ์„œ๋ณด๋‹ค ์ค‘์š”๋„๊ฐ€ ๋†’์€๊ฒŒ ์žˆ๋Š”๊ฒฝ์šฐ -> ํ˜„์žฌ ๋ฌธ์„œ ๊ฐ€์žฅ ๋’ค๋กœ ์ด๋™
				else {
					// ํ˜„์žฌ ๋ชฉ๋ก ์ œ๊ฑฐ ํ›„ ๋งˆ์ง€๋ง‰์— ๋„ฃ๊ธฐ
					int temp = q.poll();
					q.add(temp);
					
					/*
					 * ํ˜„์žฌ ๋ฌธ์„œ๊ฐ€ ๊ถ๊ธˆํ•œ ๋ฌธ์„œ์ธ๊ฒฝ์šฐ -> ๊ฐ€์žฅ ๋’ค๋กœ ์ด๋™ํ•˜๋ฏ€๋กœ Queue์˜ ์‚ฌ์ด์ฆˆ-1๋กœ ์ธ๋ฑ์Šค ์ง€์ •
					 * ๊ถ๊ธˆํ•˜์ง€ ์•Š์€ ๋ฌธ์„œ์ธ๊ฒฝ์šฐ -> ์ธ๋ฑ์Šค -1
					 */
					if(x == 0)	x = q.size()-1;
					else		x -= 1;
					
				}
			}
			System.out.println(ans);
		}
		bf.close();
	}

}

ํ’€์ด

์ค‘์š”๋„๊ฐ€ ๋™์ผํ•œ ๋ฌธ์„œ๋“ค์˜๊ฒฝ์šฐ, ์ฒ˜๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ๋ ์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ํƒ€ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค.

https://qlyh8.tistory.com/153

 

 

์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ํ˜„์žฌ Queue์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๋ฌธ์„œ์˜ ‘์ค‘์š”๋„’๋ฅผ ํ™•์ธํ•œ๋‹ค.
  2. ๋‚˜๋จธ์ง€ ๋ฌธ์„œ๋“ค ์ค‘ ํ˜„์žฌ ๋ฌธ์„œ๋ณด๋‹ค ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ฌธ์„œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋‹ค๋ฉด, ์ด ๋ฌธ์„œ๋ฅผ ์ธ์‡„ํ•˜์ง€ ์•Š๊ณ  Queue์˜ ๊ฐ€์žฅ ๋’ค์— ์žฌ๋ฐฐ์น˜ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋ฐ”๋กœ ์ธ์‡„๋ฅผ ํ•œ๋‹ค.

 

ํ•ด๊ฒฐ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ํ˜„์žฌ ๋ฌธ์„œ๋„์˜ ์ค‘์š”๋„๋ฅผ ํ™•์ธํ•˜๊ณ , ํ˜„์žฌ ๋ฌธ์„œ๋ณด๋‹ค ์ค‘์š”๋„๊ฐ€ ๋†’์€๊ฒŒ ์žˆ๋Š”์ง€ ์ฒดํฌํ•œ๋‹ค.
  • ๋งŒ์•ฝ ํ˜„์žฌ ๋ฌธ์„œ๋ณด๋‹ค ์ค‘์š”๋„๊ฐ€ ๋†’์€๊ฒŒ ์—†๋Š”๊ฒฝ์šฐ(flag = true) - <ํ˜„์žฌ ๋ฌธ์„œ์˜ ์ค‘์š”๋„๊ฐ€ ๊ฐ€์žฅ ๋†’์€๊ฒฝ์šฐ>
  •  - ํ˜„์žฌ ๋ชฉ๋ก์„ ์ธ์‡„ํ•˜์„œ ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ , ํ˜„์žฌ ์ธ์‡„๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.
  •  - ๋งŒ์•ฝ ํ˜„์žฌ ๋ฌธ์„œ๊ฐ€ ๋‚ด๊ฐ€ ๊ถ๊ธˆํ•ดํ•˜๋Š” ์ธ์‡„์˜๊ฒฝ์šฐ while๋ฌธ์„ ํƒˆ์ถœํ•˜๊ณ ,
  •  - ๋งŒ์•ฝ ํ˜„์žฌ ๋ฌธ์„œ๊ฐ€ ๊ถ๊ธˆํ•ดํ•˜์ง€ ์•Š๋Š” ์ธ์‡„์˜๊ฒฝ์šฐ - ์ธ๋ฑ์Šค๋ฅผ 1์”ฉ ๊ฐ์†Œํ•œ๋‹ค.(x--)
  • ๋งŒ์•ฝ ํ˜„์žฌ ๋ฌธ์„œ๋ณด๋‹ค ์ค‘์š”๋„๊ฐ€ ๋†’์€๊ฒŒ ์žˆ๋Š”๊ฒฝ์šฐ(flag = false) - <ํ˜„์žฌ ๋ฌธ์„œ์˜ ์ˆซ์ž๊ฐ€ ๊ฐ€์žฅ ๋†’์ง€ ์•Š๋Š”๊ฒฝ์šฐ>
  •  - ๋งŒ์•ฝ ํ˜„์žฌ ๋ฌธ์„œ๊ฐ€ ๊ถ๊ธˆํ•ดํ•˜๋Š” ๋ฌธ์„œ์ธ๊ฒฝ์šฐ -> ํ์˜ ๋งˆ์ง€๋ง‰์— ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๋ฅผ size-1๋กœ ์„ค์ •ํ•œ๋‹ค.
  •     -- (๋ฐฐ์—ด๊ณผ ๋™์ผํ•˜๊ฒŒ ์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ, size-1๋กœ ์„ค์ •ํ•œ๋‹ค.)
  •  - ๋งŒ์•ฝ ํ˜„์žฌ ๋ฌธ์„œ๊ฐ€ ๊ถ๊ธˆํ•˜์ง€ ์•Š์€ ๋ฌธ์„œ์ธ๊ฒฝ์šฐ -> ์ธ๋ฑ์Šค๋ฅผ 1์”ฉ ๊ฐ์†Œํ•œ๋‹ค.(x--)
  •  - ๊ทธ ํ›„ ํ˜„์žฌ ๋ฌธ์„œ๋ฅผ ์ œ๊ฑฐ(poll()) ํ›„ ๋งˆ์ง€๋ง‰์— ์‚ฝ์ž…(add())ํ•œ๋‹ค.

 ํ˜„์žฌ ๋ชฉ๋ก์„ ์ธ์‡„ํ•ด์„œ ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ , ํ˜„์žฌ ์ธ์‡„๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

 

 

 

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€