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 |