본문 바로가기
츄Log/알고리즘 연습장

연습#11 Check if the sentence Is Pangram

by 츄츄🦭 2023. 12. 11.
728x90

 

안녕하세요!

풀었습니다. 하지만 매우 쉬웠습니다.

1832. Check if the Sentence Is Pangram 

저는 a~z 까지 set에 넣어두고, 문자열을 하나씩 돌면서 set에 있는 문자들을 지워가는 방식을 사용했습니다.

 

class Solution {
    public boolean checkIfPangram(String sentence) {

        final Set<String> hs = new HashSet<String>();
        for (char c = 'a'; c <= 'z'; c++) {
            hs.add(c + "");
        }
        
        for (int i = 0; i < sentence.length(); i++) {
            if (hs.contains(sentence.charAt(i)+"")) {
                hs.remove(sentence.charAt(i)+"");
            }
        }
        
        return hs.size() == 0;
    }
}

 

너무 쉬웠다고 생각하고, 다른 분들의 풀이를 보았는데 더 나은 방식이 있었습니다.

 

1. alphabet="abcdefghijklmnopqrstuvwxyz"를 셋팅해놓고 string의 indexOf 사용 (String.indexOf : 해당 문자가 발견된 인덱스를 찾음, 없으면 -1 반환)

2. 알파벳 개수(26개)의 배열을 만들어두고, 문자열[character-'a'] 의 index에 true 설정, 이후 false인 것이 있는지 확인

 

그리고 대망의 비트연산 풀이

class Solution {
    public boolean checkIfPangram(String sentence) {
        int seen = 0;
        for(char c : sentence.toCharArray()) {
            int ci = c - 'a';
            seen = seen | (1 << ci);
        }
        return seen == ((1 << 26) - 1);
    }
}

 

 

<< 는 곱하기 >>는 나누기 정도로만 알고 있어서 그런지 저 코드를 보니 이해가 안되네요.

오늘은 비트 연산을 좀 이해해 보려고 합니다. 

 

728x90

'츄Log > 알고리즘 연습장' 카테고리의 다른 글

연습#13  (0) 2023.12.12
연습#12  (0) 2023.12.12
연습#10 Consecutive Characters  (0) 2023.12.10
연습#9 Long Pressed Name  (1) 2023.12.10
연습#8 의상  (1) 2023.12.08