[BOJ] 13013 ์ ๋ฏธ์ฌ ๋ฐฐ์ด
๋ฌธ์
๋ฌธ์ ์ค๋ช
Baekjoon Online Judge - 13013๋ฒ ์ ๋ฏธ์ฌ ๋ฐฐ์ด
๋ฌธ์์ด S์ i๋ฒ์งธ ์ ๋ฏธ์ฌ๋ S์ i๋ฒ์งธ ๊ธ์์์ ์์ํ๋ ์ ๋ฏธ์ฌ(Suffix)์ด๋ค.
์๋ฅผ ๋ค์ด, S = โabcdeโ์ธ ๊ฒฝ์ฐ์ 0๋ฒ์งธ ์ ๋ฏธ์ฌ๋ โabcdeโ, 3๋ฒ์งธ ์ ๋ฏธ์ฌ๋ โdeโ ์ด๋ค.
S์ ์ ๋ฏธ์ฌ ๋ฐฐ์ด์ S์ ๋ชจ๋ ์ ๋ฏธ์ฌ๋ฅผ ์ฌ์ ์์ผ๋ก ์ ๋ ฌํ ๋ฐฐ์ด์ด๋ค. ์ด๋, ๋ฐฐ์ด์ ๋ค์ด์๋ ๊ฐ์ ์ ๋ฏธ์ฌ ๋ฒํธ์ด๊ณ , ์ ๋ ฌ์ ์ ๋ฏธ์ฌ ๋ฒํธ์ ํด๋นํ๋ ์ ๋ฏธ์ฌ๋ก ์ํํ๊ฒ ๋๋ค.
์๋ฅผ ๋ค์ด, S = โabcaโ์ธ ๊ฒฝ์ฐ์ ์ ๋ฏธ์ฌ ๋ฐฐ์ด์ (3, 0, 1, 2)๊ฐ ๋๋ค.
๊ธธ์ด๊ฐ N์ธ ์ ๋ฏธ์ฌ ๋ฐฐ์ด์ด ์ฃผ์ด์ก์ ๋, ๊ทธ ์ ๋ฏธ์ฌ ๋ฐฐ์ด์ ๋ง๋ค ์ ์๋ S๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ ์ ์๋ค. ์ด๋, S์ ํฌํจ๋ ์๋ก ๋ค๋ฅธ ๋ฌธ์์ ๊ฐ์์ ์ต์๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N (1 โค N โค 50)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ ์ ๋ฏธ์ฌ ๋ฐฐ์ด์ ๊ฒฐ๊ณผ๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ ๋ฏธ์ฌ ๋ฐฐ์ด์ ๋ง๋ค ์ ์๋ S ์ค์์, S์ ํฌํจ๋ ์๋ก ๋ค๋ฅธ ๋ฌธ์์ ๊ฐ์์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
ํ์ด
ํด์ค
- ์ ๋ฏธ์ฌ ๋ฐฐ์ด์๋ฐ๋ผ ์ธ๋ฑ์ค ์์น์ ๋ฌธ์ ํ๋์ฉ ์ค๋ฆ์ฐจ์์ผ๋ก ์ฝ์ ํ๋ค(A,B,Cโฆ)
ex) 3012 -> bcda
- ์ฐ์ ์์๊ฐ 1์ธ ๋ฌธ์๋ถํฐ ์ฐ์ ์์ 0๋ฒ ๋ฌธ์๋ก ๋์นํ ๋ค์ ์ ๋ฏธ์ฌ ๋ฐฐ์ด์ ๊ตฌํ์ฌ ์์๊ฐ ๋ฐ๋์ง ์๋๋ค๋ฉด ๋ฌธ์ ๋์น
ex) bcda -> acda
- ๋ง์ง๋ง ์ฐ์ ์์ ๋ฌธ์๊น์ง ์งํํ ๋ค ๋ช๊ฐ์ ๋ฌธ์๊ฐ ๋ฐ๋์๋์ง ์นด์ดํธ
์ฝ๋
import java.io.*;
import java.util.*;
public class BOJ_13013_์ ๋ฏธ์ฌ๋ฐฐ์ด {
static int N, primaryCharCnt; // ํ์๋ก ํ์ํ ๋ฌธ์ ๊ฐ์(์ต์ข
์ ๋ต)
static char[] chars; // ์ ๋ฏธ์ฌ ๋ฐฐ์ด์๋ฐ๋ผ ์ธ๋ฑ์ค๋ฅผ ๋ฌธ์๋ก ๋์นํ ๋ ๋ฌธ์๊ฐ ์ ์ฅ๋๋ ๋ฐฐ์ด
static int[] inputIndex; // ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ ๋ฏธ์ฌ ๋ฐฐ์ด
static String stringifiedIdx; // ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ ๋ฏธ์ฌ ๋ฐฐ์ด์ ๋ฌธ์์ดํ
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
primaryCharCnt = N;
chars = new char[N];
inputIndex = new int[N];
stringifiedIdx = br.readLine();
StringTokenizer st = new StringTokenizer(stringifiedIdx);
// ์ ๋ฏธ์ฌ ๋ฐฐ์ด ์
๋ ฅ
for (int i=0; i<N; i++) {
int idx = Integer.parseInt(st.nextToken());
inputIndex[i] = idx; // ์ ๋ฏธ์ฌ ๋ฐฐ์ด ์ ์ฅ
chars[idx] = (char)(i+65); // ์ ๋ฏธ์ฌ ๋ฐฐ์ด์ ๋ฐ๋ผ ๋ฌธ์๋ก ๋์นํ์ฌ ๋ฌธ์ ์ ์ฅ
}
String str = new String(chars); // ๋์น๋ ๋ฌธ์๋ฅผ ๋ถ์ฌ ๋ฌธ์์ด๋ก ๋ง๋ฆ
// 1๋ฒ ์ธ๋ฑ์ค๋ถํฐ ๋ฌธ์๋ฅผ ๋์นํด๋ด
for (int i=1; i<N; i++) {
char frontChar = str.charAt(inputIndex[i-1]); // ๋์น๋๋ฉด ๋ ํ๊ฒ ๋ฌธ์
char rearChar = str.charAt(inputIndex[i]); // ์ฐ์ ์์๊ฐ ๋์ ๋ฌธ์. ๋์น๋์ด์ผํ ๋ฌธ์
// ์ฐ์ ์์๊ฐ
String sortedIdx = sortSubString(str.replace(rearChar, frontChar));
if (stringifiedIdx.equals(sortedIdx)) {
str = str.replace(rearChar, frontChar);
primaryCharCnt--;
}
}
System.out.println(primaryCharCnt);
}
private static String sortSubString(String s) {
ArrayList<String> bf = new ArrayList<String>();
ArrayList<String> at = new ArrayList<String>();
for (int size=s.length(), i=0; i<size; i++) {
bf.add(s.substring(i, size));
at.add(s.substring(i, size));
}
Collections.sort(at);
StringBuilder sb = new StringBuilder();
for (String str : at) sb.append(bf.indexOf(str)).append(" ");
sb.setLength(sb.length()-1);
return sb.toString();
}
}
๐ก
- ๋ฌธ์๋ฅผ ํ๋์ฉ ๋์นํ ๋๋ง๋ค ๋ค์ ์ ๋ฏธ์ฌ ๋ฐฐ์ด์ ๊ตฌํด ์ฐ์ ์์๋ฅผ ๊ตฌํ๋ฏ๋ก ํจ์จ์ด ๋งค์ฐ ์ข์ง ์์๋ณด์..
- ์คํฐ๋๋ ๋ค๋ฅธ ๋ถ๋ค ํ์ด๋ณด๋ฉด์ ๋ ์ข์ ํ์ด๊ฐ ์๋ค๋ฉด ์ ๋ฐ์ดํธํ ๊ฒ!