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

[๋ฐฑ์ค€] 1021๋ฒˆ: ํšŒ์ „ํ•˜๋Š” ํ

by ์ฃผ๋ฐœ2 2020. 4. 7.
๋ฐ˜์‘ํ˜•

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

 

1021๋ฒˆ: ํšŒ์ „ํ•˜๋Š” ํ

์ฒซ์งธ ์ค„์— ํ์˜ ํฌ๊ธฐ N๊ณผ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๊ณ , M์€ N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ง€๋ฏผ์ด๊ฐ€ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์ˆ˜์˜ ์œ„์น˜๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์œ„์น˜๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

www.acmicpc.net

์ฝ”๋“œ

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

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(bf.readLine());
		
		int N = Integer.parseInt(st.nextToken());	// ํ์˜ ํฌ๊ธฐ
		int M = Integer.parseInt(st.nextToken());	// ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜
		int[] arr = new int[M];	// ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์ˆ˜์˜ ์œ„์น˜
		int min = 0;	// 2๋ฒˆ, 3๋ฒˆ ์—ฐ์‚ฐ์˜ ์ตœ์†Ÿ๊ฐ’
		LinkedList<Integer> list = new LinkedList<Integer>();
		
		st = new StringTokenizer(bf.readLine());
		
		for(int i=0; i<M; i++) 
			arr[i] = Integer.parseInt(st.nextToken());
		
		for(int i=1; i<=N; i++)
			list.add(i);

		for(int i=0; i<arr.length; i++) {
			
			// ํ˜„์žฌ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ’์ด ๋ฐ”๋กœ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ๊ฐ’์ผ๋•Œ
			if(arr[i] == list.peek()) {
				list.remove();
				continue;
			}
			
			// ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์ˆ˜๋ฅผ 2๋ฒˆ์—ฐ์‚ฐ(์™ผ์ชฝ์œผ๋กœ ์ด๋™)์„ ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ด๋“์ผ๋•Œ
			if(list.indexOf(arr[i]) <= list.size()/2 ) {
				
				// ์™ผ์ชฝ์œผ๋กœ ํ•œ์นธ์”ฉ ๋ฐ€๊ธฐ - ํ˜„์žฌ๊ฐ’ ์ œ๊ฑฐํ•˜๊ณ  ๋งˆ์ง€๋ง‰์— ๋„ฃ๊ธฐ
				while(list.peek() != arr[i]) {
					int temp = list.remove();
					list.add(temp);
					min ++;
				}
			}
			
			// ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์ˆ˜๋ฅผ 3๋ฒˆ์—ฐ์‚ฐ(์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™)์„ ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ด๋“์ผ๋•Œ
			else {
				
				// ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ์นธ์”ฉ ๋ฐ€๊ธฐ - ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰๊ฐ’์„ ํ˜„์žฌ๊ฐ’์œผ๋กœ ๋„ฃ๊ธฐ
				while(list.peek() != arr[i]) {
					int temp = list.get(list.size()-1);
					list.add(0, temp);
					list.remove(list.size()-1);
					min ++;
				}
			}
			
			list.remove();	// ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์ˆ˜๊ฐ€ ์ฒซ๋ฒˆ์งธ ์œ„์น˜๋กœ ์˜ค๋ฉด ๋ฝ‘์•„๋‚ธ๋‹ค.
		}
		
		System.out.println(min);
		bf.close();
	}

}

ํ’€์ด

๋ฌธ์ œ๋ฅผ ์ž˜ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค. 

ํ์˜ ํฌ๊ธฐ๊ฐ€ N๊ฐœ์ด๋ฉด, 1 ~ N๊นŒ์ง€์˜ ๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค.

๊ทธ ํ›„ 1~N๊นŒ์ง€์˜ ์ˆ˜ ์ค‘ ๋ฝ‘์œผ๋ ค๊ณ  ํ•˜๋Š” ๊ฐœ์ˆ˜(M)๊ณผ ๋ฝ‘์œผ๋ ค๊ณ  ํ•˜๋Š” ์ˆœ์„œ์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

2๋ฒˆ, 3๋ฒˆ ์—ฐ์‚ฐ์ด ์ตœ์†Ÿ๊ฐ’์ด ๋˜๋„๋ก ๋ฝ‘์•„์•ผํ•˜๋Š”๋ฐ 2๋ฒˆ, 3๋ฒˆ ์—ฐ์‚ฐ์˜ ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  2. ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™์‹œํ‚จ๋‹ค. ์ด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด, a1, ..., ak ๊ฐ€ a2, ..., ak, a1 ์ด ๋œ๋‹ค.

  3. ์˜ค๋ฅธ์กฑ์œผ๋กœ ํ•œ ์นธ ์ด๋™์‹œํ‚จ๋‹ค. ์ด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด a1, ..., ak ๊ฐ€ ak, a1, ..., ak-1 ์ด ๋œ๋‹ค.

 

์ฆ‰ ๋ฝ‘์œผ๋ ค๊ณ  ํ•˜๋Š” ์ˆœ์„œ์˜ ์œ„์น˜๊ฐ€ ์™ผ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๊ฒƒ์ด ์ตœ์†Ÿ๊ฐ’์ธ์ง€, ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๊ฒƒ์ด ์ตœ์†Ÿ๊ฐ’์ธ์ง€ ๋น„๊ตํ•ด๊ฐ€๋ฉฐ ์ตœ์†Ÿ๊ฐ’์ด ๋‚˜์˜ค๋„๋ก ํ’€์–ด์•ผํ•œ๋‹ค.

 

N = 10 ์ผ๋•Œ, 

list = [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10] ์ด ๋œ๋‹ค.

 

์—ฌ๊ธฐ์„œ 1 ~ 6๋Š” 2๋ฒˆ์—ฐ์‚ฐ(์™ผ์ชฝ์œผ๋กœ ์ด๋™)์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ตœ์†Ÿ๊ฐ’์ด๊ณ ,

6 ~ 10์€ 3๋ฒˆ์—ฐ์‚ฐ(์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™)์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ตœ์†Ÿ๊ฐ’์ด๋‹ค.

์ฆ‰ ๋ฝ‘์œผ๋ ค๊ณ  ํ•˜๋Š” ์œ„์น˜์˜ ์ธ๋ฑ์Šค๊ฐ’์ด list ์‚ฌ์ด์ฆˆ์˜ ๋ฐ˜๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์„๋•Œ -> ์™ผ์ชฝ์ด๋™,

list ์‚ฌ์ด์ฆˆ์˜ ๋ฐ˜๋ณด๋‹ค ํด๋•Œ -> ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ ํ•˜๋Š”๊ฒƒ์ด ์ตœ์†Ÿ๊ฐ’์ด ๋œ๋‹ค.

 

์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋Š” ์—ฐ์‚ฐ์€ ํ˜„์žฌ๊ฐ’์„ ์ œ๊ฑฐํ•˜๊ณ , ์ œ๊ฑฐํ•œ ํ˜„์žฌ๊ฐ’์„ list์— ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋Š” ์—ฐ์‚ฐ์€ ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰๊ฐ’์„ ์ œ๊ฑฐํ•˜๊ณ , ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ์— ์ œ๊ฑฐํ•œ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

 

 

 

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€

๐Ÿ”HALO