
-Code
import java.util.*;
public class LeetCode500 {
// Keyboard Row
static String[] keyboardLines = {"qwertyuiop", "asdfghjkl", "zxcvbnm"};
// 문자를 가지고 해당하는 라인을 바로 찾기위한 map
static Map<Character, Integer> keyboardLineMap = new HashMap<>();
static {
for (int i = 0; i < 3; i++) {
for (char ch : keyboardLines[i].toCharArray()) {
keyboardLineMap.put(ch, i);
}
}
}
public String[] findWords(String[] words) {
// 결과 저장 리스트
List<String> answer = new ArrayList<>();
// 탐색
for (String word : words) {
// 소문자로 변경후 char 배열로 변환
char[] lowerWord = word.toLowerCase().toCharArray();
// 포함되어야 하는 라인 셋팅
int targetLine = keyboardLineMap.get(lowerWord[0]);
boolean flag = true;
// 문자를 돌면서 확인
for (char ch : lowerWord) {
// 해당 문자가 포함되어야 하는 라인이 아닌 경우 false 처리 및 탈출
if (keyboardLineMap.get(ch) != targetLine) {
flag = false;
break;
}
}
// 문제없는 문자열이면 추가
if (flag) answer.add(word);
}
return answer.toArray(String[]::new);
}
}
처음에 단순하게 3중 for문으로 생각하다가 너무 비효율적인 것 같아서 다른 방식이 없나 찾아보니 map을 통해 포함되는 것을 찾아서 검사하라는 것을 보고 수정했습니다.
'알고리즘 문제 > Java' 카테고리의 다른 글
| [LeetCode/Java] Sum of Left Leaves (0) | 2026.06.28 |
|---|---|
| [LeetCode/Java] Reverse String (0) | 2026.06.27 |
| [LeetCode/Java] Number Complement (0) | 2026.06.25 |
| [LeetCode/Java] Add Strings (0) | 2026.06.24 |
| [LeetCode/Java] Reverse Bits (0) | 2026.06.23 |