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์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๋ ์ฐ์ฐ์ ๋ฆฌ์คํธ์ ๋ง์ง๋ง๊ฐ์ ์ ๊ฑฐํ๊ณ , ๋ฆฌ์คํธ์ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ์ ์ ๊ฑฐํ ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Codeforces] 1316A: Grade Allocation (0) | 2020.04.07 |
---|---|
[๋ฐฑ์ค] 10709๋ฒ: ๊ธฐ์์บ์คํฐ(๊ตฌํ) (0) | 2020.04.07 |
[๋ฐฑ์ค] 10026๋ฒ: ์ ๋ก์์ฝ(DFS) (0) | 2020.04.06 |
[Codeforces] 1136A: Nastya is Reading a Book (0) | 2020.04.06 |
[Codeforces] 1093A: Dice Rolling (0) | 2020.04.02 |
๋๊ธ