import java.util.*;
class Solution {
public int[] solution(int n, String[] words) {
int[] answer = new int[2];
char[] word1;
char[] word2;
HashSet<String> set = new HashSet<>();
set.add(words[0]);
for(int i=1; i<words.length; i++){
System.out.println("set : " + set);
word1 = words[i-1].toCharArray();
word2 = words[i].toCharArray();
System.out.println("word1, word2 : " + words[i-1] + words[i]);
if(word1[word1.length-1] == word2[0]){
if(set.contains(word2)){
System.out.println("contains");
answer[0] = i - (n*(int)(i/n)) + 1;
answer[1] = (int)(i/n) + 1;
break;
}else{
set.add(words[i]);
}
}else{
answer[0] = i - (n*(int)(i/n)) + 1;
answer[1] = (int)(i/n) + 1;
break;
}
}
return answer;
}
}
위 코드에서 contains가 false를 반환합니다.. set에 add를 할때 주소값이 들어가서 그런거같은대요.. 문자열자체를 add할 수 있는 방법이 있나요?
아니요. 문자열은 좀 특수해서 직접하는 값 비교에서는 equals를 사용해야 정확하지만, contains같이 값을 비교하는 것에서는 알아서 equals를 사용하기 때문에 주소값을 비교하지 않아요. 오히려 인자로 들어가는 word2가 문자 배열이라서 equals로 비교할 때 문자열이 아니기 때문에 항상 false를 반환한다고 해요.
아 매번 파이썬으로 하다보니 변수형에서 간과햇네요. 감사합니다.