본문 바로가기
알고리즘 문제/Java

[LeetCode/Java] Keyboard Row

by 현장 2026. 6. 26.

-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