처음에는 map을 사용해 보려다 map의 경우 메모리와 조건 연산이 더 많이 필요할 거 같아서 set으로 바꿔보았다.
import java.util.*;
public class bj1972 {
static Scanner scanner = new Scanner(System.in);
static Vector<String> data = new Vector<>();
public static void main(String[] args) {
inputData();
findAnswer();
scanner.close();
}
public static void inputData(){
System.out.println("inputData()");
String temp;
while(true){
temp = scanner.next();
if(temp.equals("*")){
break;
}
data.add(temp);
}
}
public static void findAnswer(){
System.out.println("findAnswer()");
int i, j, D, N;
String str;
for(i = 0; i < data.size(); i++){
boolean conti = true;
str = data.get(i);
System.out.println("검사할 str : " + str);
N = str.length();
for(D = 0; D <= N - 2; D++){
conti = true;
System.out.println("D쌍 : " + D + " / " + (N - D - 1) + "개가 나와야 함");
Set<String> set = new HashSet<>();
for(j = 0; j < N - D - 1; j++){
//map 말고 set을 사용하면 조건문을 줄일 수 있을거 같다.
String temp = String.valueOf(str.charAt(j)) + String.valueOf(str.charAt(j + D + 1));
System.out.print(temp + " ");
//1. 일단 다 집어 넣고 크기 비교
set.add(temp);
}
if(N - D - 1 != set.size()){
System.out.println("중복 요소 있음!");
conti = false;
break;
}
System.out.println();
}
if(conti){
System.out.println(str + " is surprising.");
}
else{
System.out.println(str + " is NOT surprising.");
}
System.out.println();
}
}
}
import java.util.*;
public class bj1972 {
static Scanner scanner = new Scanner(System.in);
static Vector<String> data = new Vector<>();
public static void main(String[] args) {
inputData();
findAnswer();
scanner.close();
}
public static void inputData(){
System.out.println("inputData()");
String temp;
while(true){
temp = scanner.next();
if(temp.equals("*")){
break;
}
data.add(temp);
}
}
public static void findAnswer(){
System.out.println("findAnswer()");
int i, j, D, N;
String str;
for(i = 0; i < data.size(); i++){
boolean conti = true;
str = data.get(i);
System.out.println("검사할 str : " + str);
N = str.length();
for(D = 0; D <= N - 2; D++){
conti = true;
System.out.println("D쌍 : " + D + " / " + (N - D - 1) + "개가 나와야 함");
Set<String> set = new HashSet<>();
for(j = 0; j < N - D - 1; j++){
//map 말고 set을 사용하면 조건문을 줄일 수 있을거 같다.
String temp = String.valueOf(str.charAt(j)) + String.valueOf(str.charAt(j + D + 1));
System.out.print(temp + " ");
//2. 중복요소가 있는지 매번 확인
if(set.isEmpty()){
set.add(temp);
}
else if(set.contains(temp)){
System.out.println("중복 요소 있음!");
conti = false;
break;
}
else{
set.add(temp);
}
}
if(!conti){
break;
}
System.out.println();
}
if(conti){
System.out.println(str + " is surprising.");
}
else{
System.out.println(str + " is NOT surprising.");
}
System.out.println();
}
}
}
조기에 탈출하는게 미세하게 메모리나 시간부분에서 효율적이다.
set에 대해 정리하고 다음에는 map을 연습해본다.