[Algorithm] ๐Ÿ”ด๋ฐฑ์ค€ 1021 ํšŒ์ „ํ•˜๋Š” ํ

HaJingJingยท2021๋…„ 9์›” 1์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
112/119

0. ๋ฌธ์ œ

์ง€๋ฏผ์ด๋Š” N๊ฐœ์˜ ์›์†Œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์–‘๋ฐฉํ–ฅ ์ˆœํ™˜ ํ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ง€๋ฏผ์ด๋Š” ์ด ํ์—์„œ ๋ช‡ ๊ฐœ์˜ ์›์†Œ๋ฅผ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•œ๋‹ค.

์ง€๋ฏผ์ด๋Š” ์ด ํ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ 3๊ฐ€์ง€ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๋ฝ‘์•„๋‚ธ๋‹ค. ์ด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด, ์›๋ž˜ ํ์˜ ์›์†Œ๊ฐ€ a1, ..., ak์ด์—ˆ๋˜ ๊ฒƒ์ด a2, ..., ak์™€ ๊ฐ™์ด ๋œ๋‹ค.
์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™์‹œํ‚จ๋‹ค. ์ด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด, a1, ..., ak๊ฐ€ a2, ..., ak, a1์ด ๋œ๋‹ค.
์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™์‹œํ‚จ๋‹ค. ์ด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด, a1, ..., ak๊ฐ€ ak, a1, ..., ak-1์ด ๋œ๋‹ค.
ํ์— ์ฒ˜์Œ์— ํฌํ•จ๋˜์–ด ์žˆ๋˜ ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ง€๋ฏผ์ด๊ฐ€ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์›์†Œ์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (์ด ์œ„์น˜๋Š” ๊ฐ€์žฅ ์ฒ˜์Œ ํ์—์„œ์˜ ์œ„์น˜์ด๋‹ค.) ์ด๋•Œ, ๊ทธ ์›์†Œ๋ฅผ ์ฃผ์–ด์ง„ ์ˆœ์„œ๋Œ€๋กœ ๋ฝ‘์•„๋‚ด๋Š”๋ฐ ๋“œ๋Š” 2๋ฒˆ, 3๋ฒˆ ์—ฐ์‚ฐ์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

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

์ถœ๋ ฅ
์ฒซ์งธ ์ค„์— ๋ฌธ์ œ์˜ ์ •๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค.

1. ์•„์ด๋””์–ด

๐Ÿ’ก list ์‚ฌ์šฉ
๐Ÿ’ก target๊ณผ ๊ฐ™์œผ๋ฉด removeํ•˜์—ฌ list์—์„œ ๋นผ์คŒ
๐Ÿ’ก ์ „์ฒด ์‚ฌ์ด์ฆˆ์™€ ์ธ๋ฑ์Šค ๊ฐ’์„ ๋น„๊ตํ•ด์„œ ์ธ๋ฑ์Šค๊ฐ’์ด ์ „์ฒด ์‚ฌ์ด์ฆˆ์—์„œ ๋ฐ˜๋ณด๋‹ค ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ ํ•œ ์นธ ์ด๋™, ๋ฐ˜๋Œ€๋ฉด ์™ผ์ชฝ ํ•œ ์นธ ์ด๋™

2. ํ•ต์‹ฌ ํ’€์ด

  1. list ์‚ฌ์šฉ
ArrayList<Integer> list = new ArrayList<>();
  1. target๊ณผ ๊ฐ™์œผ๋ฉด removeํ•˜์—ฌ list์—์„œ ๋นผ์คŒ
if(list.get(0) == target[idx]) {
	list.remove(0);
	idx++;
}
  1. ์ „์ฒด ์‚ฌ์ด์ฆˆ์™€ ์ธ๋ฑ์Šค ๊ฐ’์„ ๋น„๊ตํ•ด์„œ ์ธ๋ฑ์Šค๊ฐ’์ด ์ „์ฒด ์‚ฌ์ด์ฆˆ์—์„œ ๋ฐ˜๋ณด๋‹ค ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ ํ•œ ์นธ ์ด๋™, ๋ฐ˜๋Œ€๋ฉด ์™ผ์ชฝ ํ•œ ์นธ ์ด๋™
else {
	int len = list.size();
	int index = list.indexOf(target[idx]);
	if(index > len/2) {
		for(int i=len-1; i>=index; i--) {
			int tmp = list.remove(list.size()-1);
			list.add(0, tmp);
			sum++;
		}
	} else {
		for(int i=0; i<index; i++) {
			int tmp = list.remove(0);
			list.add(len-1, tmp);
			sum++;
		}
	}
}

3. ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class BOJ_1021 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] s = br.readLine().split(" ");
		
		int n = Integer.parseInt(s[0]);
		int m = Integer.parseInt(s[1]);
		
		int[] target = new int[m];
		
		s = br.readLine().split(" ");
		for(int i=0; i<m; i++) {
			target[i] = Integer.parseInt(s[i]);
		}
		
		ArrayList<Integer> list = new ArrayList<>();
		
		for(int i=1; i<=n; i++) {
			list.add(i);
		}
		
		int sum = 0;
		int idx = 0;
		while(list.size() != 0) {
			if(idx >= m) break;
			if(list.get(0) == target[idx]) {
				list.remove(0);
				idx++;
			} else {
				int len = list.size();
				int index = list.indexOf(target[idx]);
				if(index > len/2) {
					for(int i=len-1; i>=index; i--) {
						int tmp = list.remove(list.size()-1);
						list.add(0, tmp);
						sum++;
					}
				} else {
					for(int i=0; i<index; i++) {
						int tmp = list.remove(0);
						list.add(len-1, tmp);
						sum++;
					}
				}
			}
		}
		
		System.out.println(sum);
		
	}

}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณตโœจ

profile
๐ŸŒฑ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€