1. 오늘 학습한 내용
백준 집합 11478번 문제
2. 알게 된 내용
처음에 생각한 것은 원리 그대로 생각해서, n글자씩 문자열을 잘라와서 집합 set에 넣으면서 진행하려고 하였다.
HashSet<String> set = new HashSet<>();
for (int i = 0; i < s.length(); i++) {
int start_index = 0;
int end_index = i + 1;
while (end_index <= 5) {
set.add(s.substring(start_index, end_index));
start_index++;
end_index++;
}
}
하지만... 이 질문을 올릴 당시까지만 해도 내가 맞게 한 것 같은데 어디서 틀린 건지 몰랐었는데..
답변주신 분의 답변을 통해.. 내가 end_index <= 5까지 while문을 돌린 게 문제였음을 알게 되었다...
너무 단편적으로 문자열 길이가 5인 것만 생각했다...!!
앞으로는 더 다양한 케이스를 생각해보아야겠다는 생각이 들었다.. 너무 어이없고 부끄러워서 삭제해버리고 싶지만... 더 반성하고 발전하자는 의미로 그대로 둬야겠다..
그래서 고친 코드는
HashSet<String> set = new HashSet<>();
for (int i = 0; i < s.length(); i++) {
int start_index = 0;
int end_index = i + 1;
while (end_index <= s.length()) {
set.add(s.substring(start_index, end_index));
start_index++;
end_index++;
}
}
위와 같이 s.length()까지 반복하도록 수정했더니 맞았다.
다른 분들의 코드보다 메모리랑 시간 모두 적게 소요되었다.
아무튼... 오늘을 계기로 앞으로 코딩 문제를 풀 때 더 다양한 케이스에 대해 생각해낼 수 있도록 더 노력해야겠다!