강의로 돌아가기
이상민

hashSet 사용시 contains..

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할 수 있는 방법이 있나요?

1 개의 답변
낙방여우

아니요. 문자열은 좀 특수해서 직접하는 값 비교에서는 equals를 사용해야 정확하지만, contains같이 값을 비교하는 것에서는 알아서 equals를 사용하기 때문에 주소값을 비교하지 않아요. 오히려 인자로 들어가는 word2가 문자 배열이라서 equals로 비교할 때 문자열이 아니기 때문에 항상 false를 반환한다고 해요.

  • 이상민

    아 매번 파이썬으로 하다보니 변수형에서 간과햇네요. 감사합니다.

    이상민―2024.11.05 11:25
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.