코린이의 소소한 공부노트

[LeetCode/Easy] 2085. Count Common Words With One Occurrence 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 2085. Count Common Words With One Occurrence

무지맘 2023. 6. 21. 12:17

1. Input

1) String[] words1

2) String[] words2

 

2. Output

1) words1word2에 공통적으로 나타나는 단어 중 각 배열에 1번씩만 나타나는 단어의 수를 반환

 

3. Constraint

1) 1 <= words1.length, words2.length <= 1000

2) 1 <= words1[i].length, words2[j].length <= 30

3) 두 배열의 단어들은 영어 소문자로 이루어져 있다.

 

4. Example

Input: words1 = ["leetcode","is","amazing","as","is"], words2 = ["amazing","leetcode","is"] -> Output: 2

설명: 두 배열에 모두 나타나는 단어는 "leetcode", “is", "amazing"의 세 단어이다.

- “leetcode": 두 배열에 각각 1, 1번 나타나므로 OK

- "is": 두 배열에 각각 2, 1번 나타나므로 X

- "amazing": 두 배열에 각각 1, 1번 나타나므로 OK

- 따라서 2를 반환한다.

 

5. Code

1) 첫 코드(2023/06/21)

class Solution {
    public int countWords(String[] words1, String[] words2) {
        HashMap<String, Integer> m1 = new HashMap<>();
        for(String s : words1)
            m1.put(s, m1.getOrDefault(s,0)+1);
        List<String> list1 = new ArrayList<>();
        for(String s : m1.keySet())
            if(m1.get(s)==1) list1.add(s);
        
        HashMap<String, Integer> m2 = new HashMap<>();
        for(String s : words2)
            m2.put(s, m2.getOrDefault(s,0)+1);
        List<String> list2 = new ArrayList<>();
        for(String s : m2.keySet())
            if(m2.get(s)==1) list2.add(s);
        
        int count = 0;
        for(String s : list1)
            if(list2.contains(s)) count++;
        
        return count;
    }
}

- 10%, 24%

- 다시 풀어보고 싶은데 아이디어가..