[๋ฐฑ์ค/1141/์ ๋์ฌ/์ค๋ฒ1]
https://www.acmicpc.net/problem/1141
1141๋ฒ: ์ ๋์ฌ
์ ๋์ฌX ์งํฉ์ด๋ ์งํฉ์ ์ด๋ค ํ ๋จ์ด๊ฐ, ๋ค๋ฅธ ๋จ์ด์ ์ ๋์ด๊ฐ ๋์ง ์๋ ์งํฉ์ด๋ค. ์๋ฅผ ๋ค์ด, {hello}, {hello, goodbye, giant, hi}, ๋น์ด์๋ ์งํฉ์ ๋ชจ๋ ์ ๋์ฌX ์งํฉ์ด๋ค. ํ์ง๋ง, {hello, hell}, {giant,
www.acmicpc.net
<<ํ์ด>>
์๊ฐ๋ณต์ก๋ : O(N^3)
์ฌ์ฉํ ๋ฐฉ๋ฒ : Comparable<T> ์ ๋ ฌ
->
์ฐ์ , ์ด ๋ฌธ์ ๋ Comparable<T>๋ก ๊ฐ์ฒด๋ฅผ ์ ๋ ฌ์ํจ ๋ค์ ํ์ด์ผ ํ๋ ๋ฌธ์ ์ด๋ค. ๊ทธ๋ ๊ฒ ํด์ผ ๋ฌธ์ ๋ฅผ ์กฐ๊ธ ๋ ์ฝ๊ฒ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฐ๋ฐ, ์ด์ํ๊ฒ ์ด ๋ฌธ์ ๊ฐ ํ๋ ธ๋ค... ์์ ์ฝ๋๋ ๋ค ๋ง๋๋ฐ ๋ง์ด๋ค..
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
class Data implements Comparable<Data>{
String data= "";
int datalength = data.length();
public Data(String data, int datalength) {
this.data = data;
this.datalength = datalength;
}
@Override
public int compareTo(Data o) {
return this.datalength - o.datalength;
}
}
class Main {
static int answer2 = 0;
private int solution(Data[] brr) {
int answer = 0;
for (int i = 0; i < brr.length - 1; i++) {
answer = 0;
int count = 0;
for (int j = i; j < brr.length; j++) {
if (brr[j].data.indexOf(brr[i].data) != 0 ) {
for (int k = j; k < brr.length; k++) {
if(brr[k].datalength != brr[j].datalength && brr[k].data.indexOf(brr[j].data) == 0) {
count--;
}
}
count++;
}
}
answer = count + 1;
answer2 = Math.max(answer2, answer);
}
return answer2;
}
public static void main(String[] args) throws Exception{
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String[] arr = new String[n];
for (int i = 0; i < n; i++) {
String a = br.readLine();
arr[i] = a;
}
Data[] brr = new Data[n];
for (int i = 0; i < n; i++) {
brr[i] = new Data(arr[i], arr[i].length());
}
Arrays.sort(brr);
System.out.println(T.solution(brr));
}
}
<<์ต์ข ํ์ด>>
์ด ๋ฌธ์ ๋ ์ฌ์ ์์ผ๋ก ์ ๋ ฌ์ ํ๊ณ ํธ๋ ๊ฒ์ด ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ด์๋ค..!!
๊ทธ๋ ๊ฒ ํ๋ฉด ์ด์ ๊บผ์๋ง ๋น๊ตํด๋ ๋๋ ๊ฒ์ด๋ค.
์ฌ์ ์์ผ๋ก ํด์ ํ์ฌ ๊ฒ์ด ์ด์ ๊ฒ๊ณผ ์กฐํฉ์ด ์ ๋๊ณ , ๊ทธ ๋ค์ ๊ณผ๋ ์กฐํฉ์ด ์ ๋๋ค๋ฉด ๋น์ฐํ ์ด์ ๊ฐ๊ณผ ๊ทธ ๋ค์ ๊ฐ ๊ณผ๋ ์กฐํฉ์ด ์ ๋๋ค.
์ด๋ฐ ์๊ฐ์ผ๋ก ์ ๊ทผ์ ํ๋ค๋ฉด ์ฝ๊ฒ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
์ด๊ฑด ๊ธ๋ก๋ง ๋ณด๋ ๊ฒ ๋ณด๋ค ์ง์ ์จ๋ณด๋ฉด์ ๋ ผ๋ฆฌ๊ตฌ์กฐ๋ฅผ ํ์ ํ๋ ๊ฒ์ด ํจ์ฌ ์ข๋ค.
indexOf ๋ณด๋ค ํจ์ฌ ์ข์ ์ข์ ๋ฉ์๋๋ฅผ ๋ฐ๊ฒฌํ๋ค. ๋ฐ๋ก startWith์ธ ์ ์ด๋ค. ์ด๋ฅผ ํ์ฉํ๋ฉด ๊ตณ์ด
indexOf๊ฐ ๊ฐ์ด 0์ธ๊ฐ์ ๋ํด ๋น๊ตํ ํ์๊ฐ ์๋ค ใ ใ ใ
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
class Data implements Comparable<Data> {
String data;
public Data(String data) {
this.data = data;
}
@Override
public int compareTo(Data o) {
// ์ฌ์ ์์ผ๋ก ์ ๋ ฌ
return this.data.compareTo(o.data);
}
}
class Main {
private int solution(Data[] brr) {
// ์ฌ์ ์์ผ๋ก ์ ๋ ฌ
Arrays.sort(brr);
int count = 1; // ์ต์ ํ๋์ ๋จ์ด๋ ํญ์ ํฌํจ๋ฉ๋๋ค.
for (int i = 0; i < brr.length - 1; i++) {
// ํ์ฌ ๋จ์ด๊ฐ ๋ค์ ๋จ์ด์ ์ ๋์ฌ์ธ์ง ํ์ธ
if (!brr[i + 1].data.startsWith(brr[i].data)) {
// ์ ๋์ฌ๊ฐ ์๋๋ฉด ๋ถ๋ถ์งํฉ์ ํฌํจํ ์ ์์ต๋๋ค.
count++;
}
}
return count;
}
public static void main(String[] args) throws Exception {
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Data[] brr = new Data[n];
for (int i = 0; i < n; i++) {
String data = br.readLine();
brr[i] = new Data(data);
}
System.out.println(T.solution(brr));
}
}
<<์ถ๊ฐ ๊ณต๋ถ>>
startsWtih : ์ฒซ ์์์ ๋ฌธ์์ด์ด ํน์ ๊ฐ์ธ๊ฐ?
indexOf : ํน์ ๋ฌธ์๊ฐ ๋ช ๋ฒ ์ธ๋ฑ์ค๋ถํฐ ์๋๊ฐ?
๊ฐ์ฒด ์ ๋ ฌ
Comparable<T>
1. ์ฌ์ ์
@Override
public int compareTo(Data o) {
// ์ฌ์ ์์ผ๋ก ์ ๋ ฌ
return this.data.compareTo(o.data);
}
2. ์ค๋ฆ์ฐจ์
@Override
public int compareTo(Data o) {
return this.datalength - o.datalength;
}
3. ๋ด๋ฆผ์ฐจ์
@Override
public int compareTo(Data o) {
return o.datalength - this.datalength;
}
'์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ธํ๋ฐ/DFS/8. ์์ด ์ถ์ธกํ๊ธฐ] (4) | 2024.03.15 |
---|---|
[๋ฐฑ์ค/1152/๋จ์ด์ ๊ฐ์/๋ธ๋ก ์ฆ2] (1) | 2024.03.14 |
[๋ฐฑ์ค/์ค๋ฒ5/๋ถ์์ฐพ๊ธฐ/๊ตฌํ] (5) | 2024.03.12 |
[๋ฐฑ์ค/1004/์ค๋ฒ3] ์ด๋ฆฐ ์์ (5) | 2024.03.12 |
[๋ฐฑ์ค/2941/์ค๋ฒ5] ํฌ๋ก์ํฐ์ ์ํ๋ฒณ (7) | 2024.03.05 |
๋๊ธ