1. ๋ด๊ฐ ํผ ์ฝ๋
(1) ์ ๋ ฅ ๊ฐ ๋ฐ๊ธฐ
(2) ์ ๋ ฅ ๊ฐ์ ๋ง๋ ํจํด์ ์ฒดํฌํ๊ธฐ ์ํด
10๊ฐ์ ๋ฌธ์๊ฐ ํ๋์ ๋ง๋ ์ผ ๊ฒฝ์ฐ๋ถํฐ 1๊ฐ์ ๋ฌธ์๊ฐ ํ๋์ ๋ง๋์ผ ๊ฒฝ์ฐ๋ฅผ loop๋ฅผ ๋๋ฉฐ check ํ๋ค.
(2-1) ๋ฐฐ์ด์ ๋ง๋ค๊ณ ํด๋น ๋ฐฐ์ด์ ์๋ฆฐ ๋ง๋๋ค์ ์ ์ฅํ๋ค.
(2-2) ๋ฐฐ์ด์ ์์๋ผ๋ฆฌ ๋ฌธ์์ด์ด ์ผ์นํ๋์ง ํ์ธ
(2-3) ๋ฌธ์์ด์ด ๋ ์์์ ๋ ์ผ์นํ๋ ๊ฒฝ์ฐ๊ฐ ์๋์ง check (์ฌ๊ท ํจ์ ์ด์ฉ)
(3) ๋ ์์์ ๋ ์ผ์นํ๋ฉด ํด๋น ๋ง๋ ์ ๋ฐํ, ๊ทธ๋ฐ ๊ฒฝ์ฐ ์์ผ๋ฉด ํ์ฌ ๋ง๋ ์ ๋ฐํ
import java.util.*;
import java.util.function.Predicate;
public class Solution {
public static void main(String[] args) throws StringIndexOutOfBoundsException {
Scanner sc= new Scanner(System.in);
int T = sc.nextInt();
sc.nextLine();
for (int i = 1; i <= T; i++) { // Testcase ๊ฐฏ์ ๋ฐ๊ธฐ
String s = sc.nextLine(); // Test๊ฐ
/* j๊ฐ ๋ง๋ ์์ด๊ณ ,
s๋ฅผ ๋ง๋ ์์ ๋ง๊ฒ ์๋ผ์ strArr์ ์ง์ด๋ฃ๋๋ค.(subString ์ด์ฉ)
๋ง์ฝ์ strArr์ ์์ ์ค 2๊ฐ๊ฐ ์ผ์นํ ๊ฒฝ์ฐ,
๋ง๋ ์๋ฅผ ๋ ์๊ฒ ํ์ ๋ ์ผ์นํ๋ ๊ฒฝ์ฐ ์๋์ง checkํ๊ณ ,
์์ผ๋ฉด ํ์ฌ ๋ง๋ ์ ๋ฐํ
์์ผ๋ฉด ๋ ์๊ฒ ํ์ ๋ ์ผ์นํ๋ ๋ง๋ ์ ๋ฐํ
* */
for (int j = 10; j > 0; j--) {
String [] strArr = new String[(30/j)];
for (int k = 0; k < strArr.length; k++) {
strArr[k] =s.substring(k*j, (k+1)*j); // ์๋ผ ๋ฃ๊ธฐ
}
if(strArr[1].equals(strArr[2])){
System.out.println("#"+i +" "+ equalCompare(strArr[1]));
break;
}
}
}
}
/*
* ์ธ์๋ก๋ ๋ง๋ ์ ํ๋๋ฅผ ๋ฐ๋๋ค. ํด๋น ๋ง๋์๋ ๋ค๋ฅธ ์์๋ค๊ณผ ๋น๊ต ์ ์ผ์นํ๋ ๋ง๋ ์ ์ด๋ค.
* ์ธ์์ length๊ฐ ์ง์์ผ ๊ฒฝ์ฐ ํ์์ผ ๊ฒฝ์ฐ ๋๋ ์ ๊ณ์ฐ
* */
static int equalCompare (String a) {
if (a.substring(0, a.length() / 2).equals(a.substring(a.length() / 2, a.length()))) {
return equalCompare(a.substring(0, a.length() / 2));
} else if (a.substring(0, a.length() / 3).equals(a.substring(a.length() / 3, (a.length()/3)*2))) {
return equalCompare(a.substring(0, a.length() / 3));
} else {
return a.length();
}
}
}
2. ์ฝ๋ ์ ์ ๊ฒ ์ด ์ฌ๋์ ํด๋ต์
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Solution {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for(int i = 1; i <= T; i++) {
String s = br.readLine();
for(int j = 1; j < s.length(); j++) {
String a = s.substring(0, j);
String b = s.substring(j, 2 * j);
if(a.equals(b)) {
sb.append("#"+i+" "+a.length()).append("\n");
break;
}
}
}
System.out.println(sb.toString());
}
}
** ๋ฐฐ์ด์
๊ตณ์ด ๋ฐฐ์ด์ ๋ง๋ค์ด ์ ์ฅํ ํ์๊ฐ ์์๋ค.
๋ง๋ ์ ์๋ฆฐ ์ฒซ ๋ง๋์ ๋ ๋ฒ์งธ ๋ง๋๊ฐ ์๋ก ๊ฐ์์ง๋ง ํ์ธํ๋ฉด ๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ทธ ๋ค๋ก๋ ๊ฐ์ํ ๋๊น.
๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ๋ง๋ ์ ๋น ๋ฌธ์์ด์ด 10์ผ๋๋ถํฐ ์์ํด์ ๋ฐ์ผ๋ก ๋ด๋ ค์๋๋ฐ, ์ด๋ ์ ๋ง ๋นํจ์จ์ ์ด๋ค.
๋ง๋ ์๊ฐ ํจํด์ด ์๊ธฐ๋๋ผ๋, ๋ง๋ ์๋ฅผ ์ ๊ฒ ํ์ ๋ ํจํด์ด ์๊ธฐ๋ ๊ฒฝ์ฐ๊ฐ ์ฒดํฌ๋ฅผ ํด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ์๋ก์ด ํจ์๋ฅผ ๋ง๋ค๊ณ ์ฝ๋ ์ฆ๊ฐ๋ฅผ ์ผ๊ธฐ ํ๋ค.
์์ ํผ ์ฌ๋์ ์ฝ๋์ฒ๋ผ ๋ง๋ ์๋น ๋ฌธ์์ด์ 1๋ถํฐ์์ํด์ ๋๋ ค๊ฐ์ผ๋ฉด ์ฐ์ง ์์๋ ๋๋ ์ฝ๋์ด๋ค.
*bufferReader :
Scanner๋ ๋น์ทํ ๊ฒ์ด๊ณ , ์ ์ธ์
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
์ด๋ ๊ฒ ํ๋ฉด ๋๋ค.
bufferedReader๋ Scanner์ ๋นํด ์๋ ์ธก๋ฉด์์ ๋น ๋ฅด๋ค.
๊ทธ ์ด์ ๋ Scanner๋ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์ ๋ฌํ์ง๋ง, bufferedReader๋ ์ ๋ ฅ ๊ฐ์ ๋ฒํผ์ ๋ฃ๊ณ ๊ทธ ๋ค์์ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํจ์จ์ด ๋์์ ์ด๋ค.
bufferedReader๋ ๋์ Scanner ๋ณด๋ค ํฌ๋ฐํ๋ค๋ ๋จ์ ์ด ์๋ค.
bufferedReader๋ ์ํฐํค๋ก ๋ฐ์ ๋ฐ์ดํฐ ๊ตฌ๋ถ์ ๋ชปํ๋ค. ํ์ค์ space bar๋ก ๋์์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ถํด๋ ํ๋์ ์ ๋ ฅ๊ฐ์ผ๋ก ๋ค ๋ฐ๋๋ค.
๋ํ String์ผ๋ก ๋ฐ์ ์ ๋ ฅ ๊ฐ์ ๋ชป ๋ฐ์์ ๋ฐ์ ๊ฐ์ ๋ค๋ฅธ ํ์ ์ ์ฐ๊ณ ์ถ์ ๊ฒฝ์ฐ ๋ณํ ์์ ์ด ํ์ํ๋ค.
๋ง์ง๋ง์ผ๋ก ์ฌ์ฉ ์ ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ผญ ํด์ค์ผ ํ๋ค.
br.readline์ผ๋ก ํ ์ค์ฉ ์ฝ์ด์ฌ ๋๋ง๋ค try&catch ๊ตฌ๋ฌธ์ผ๋ก ๊ฐ์ธ์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ ํ์ง๋ง ๊ทธ๋ฅ ์์ฒ๋ผ ์์ธ๋ฅผ ๋งค์๋ ๋ฐ์ผ๋ก throws ํด์ฃผ๋ ๊ฒ ํธํ๋ค.
*Stringbuilder :
์๋ฐ์์๋ ๋ฌธ์์ด๋ผ๋ฆฌ ์ด์ ๋ + ์ฐ์ฐ์๋ฅผ ํตํด ๋ฐ๋ก ์ด์ด ๋ถ์ผ ์ ์๋ค.
๊ทผ๋ฐ, ์ด๋ ์ด์ด์ผํ ๋ฌธ์์ด์ด ๋ง์์ง์๋ก ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.
๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์์์๋ ๋ณผ ์ ์๋ค์ํผ, ๋ ๊ฐ์ง String์ ํ๋์ String ๊ฐ์ฒด๋ก ๋ฌถ๊ธฐ ์ํด ์๋ก์ด String ๊ฐ์ฒด๋ฅผ ์์ฑํ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ด์ ๋ ๊ฐ์ง String ๊ฐ์ฒด ๋ํ ์ฌ์ ํ ์ด์์๋ค. + ๋ฅผ ๊ณ์ ํด๋๊ฐ๋ค๋ณด๋ฉด, ์๋ก์ด String ๊ฐ์ฒด๊ฐ ๊ณ์ ๋ง๋ค์ด์ง ๊ฒ์ด๊ณ , ์ฐ์ฐ์ ์ฐ์ด๊ณ ๋ ์ด์ ์ธ๋ชจ ์๋ String ๊ฐ๋ค๋ ์ฌ์ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ ๊ฒ์ด๋ค.
์ด๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ก์๋จน๊ณ ์ฑ๋ฅํ๋ฝ์ ์ผ๊ธฐํ๋ค.
์ด๋ฅผ ๋ง๊ธฐ์ํด String๋ผ๋ฆฌ์ ๋ ํ๊ธฐ์ ํนํ๋ ๋ ์์ด ๋ฐ๋ก Stringbuilder์ด๋ค.
public class Solution {
public static void main(String[] args)
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("๋ฌธ์์ด ").append("์ฐ๊ฒฐ");
// String str = stringBuilder; // String์ StringBuilder๋ฅผ ๊ทธ๋๋ก ๋ฃ์ ์ ์๋ค. toString()์ ๋ถ์ฌ์ผ ํ๋ค
String str = stringBuilder.toString();
// ๋ println()์ ๊ฐ์ ๊ฐ์ ์ถ๋ ฅํ๋ค
System.out.println(stringBuilder);
System.out.println(str);
}
}
stringbuilder ๊ฐ์ฒด๋ฅผ ๋ถ๋ฅด๊ณ , (์ด๊ธฐ์๋ ๋น์ด์๋ค.)
.append("๋ถ์ผ ๋ฌธ์์ด") ํจ์๋ฅผ ํตํด string ๊ฐ์ ๊ณ์ ๋ถ์ผ ์ ์๋ค.
๋น์ฐํ๊ฒ๋ Stringbuilder๋ string์ด ์๋๊ธฐ ๋๋ฌธ์ string ๋ณ์์ ์ ์ฅ ์ toString()์ผ๋ก ๋ณ๊ฒฝํด์ผ ํ๋ค.
์ถ๋ ฅ์ ๋ฐ๋ก ํ ์ ์๋ค.