코린이의 소소한 공부노트

[LeetCode/Easy] 500. Keyboard Row 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 500. Keyboard Row

무지맘 2022. 11. 30. 15:59

1. Input

1) 문자열 배열 words

 

2. Output

1) 쿼티 키보드 세 줄 중 1줄로만 타이핑이 가능한 문자열을 담은 배열

2) 쿼티 키보드의 구성

첫 번째 줄: qwertyuiop

두 번째 줄: asdfghjkl

세 번째 줄: zxcvbnm

 

3. Constraint

1) 1 <= words.length <= 20

2) 1 <= words[i].length <= 100

3) words[i]는 영어 대소문자로만 이루어져있다.

 

4. Example

Input: words={"Hello","Alaska","Dad","Peace"} -> Output: {"Alaska","Dad"}

설명: 각 단어를 타이핑 하는 데 필요한 키보드의 줄 번호

“Hello”: 1, 2

"Alaska“: 2
"Dad“: 2

"Peace": 1, 2, 3 이므로 한 줄만으로 타이핑이 가능한 {"Alaska","Dad"}을 반환한다.

  

5. Code

1) 첫 코드(2022/06/18)

List<Integer> list = new ArrayList();

for(int i=0 ; i<words.length ; i++){
if(words[i].toLowerCase().matches("[qwertyuiop]+")
   || words[i].toLowerCase().matches("[asdfghjkl]+")
   || words[i].toLowerCase().matches("[zxcvbnm]+"))
    list.add(i);
}

String[] result = new String[list.size()];
for(int i=0 ; i<result.length ; i++)
    result[i] = words[list.get(i)];

return result;

2) 다시 풀어본 코드(2022/11/30)

import java.util.*;

ArrayList<String> list = new ArrayList<String>();
String[] keys = {"[qwertyuiop]+", "[asdfghjkl]+", "[zxcvbnm]+"};
for(int i=0 ; i<words.length ; i++){
    for(String k : keys){
        if(words[i].toLowerCase().matches(k)){
            list.add(words[i]);
            break;
        }
    }
}
return list.toArray(new String[] {});

  - 1번과 시간은 비슷하지만 공간절약은 더 많이 된다.