16번

nacSeo (낙서)·2022년 12월 8일
0

DailyCoding

목록 보기
16/28

문자열을 입력받아 아이소그램인지 여부를 리턴하는 문제였다.
※ 아이소그램 (isogram) : 각 알파벳 하나씩만 사용해서 만든 단어나 문구

처음 생각한 아이디어는 재귀를 통해 푸는 것이었다. str 첫 번째 요소를 head로 두고, 나머지를 copyofrange 함수를 통해 tail로 두고, tail을 순회하며 head와 같은지 비교한다. 그리고 다시 tail을 head와 tail로 나눠서 비교하는 방법을 떠올렸다. 그러나 tail을 만들기 위해선 문자열을 배열로 바꾸고, head는 char로 둬야하고 등등 되게 복잡했다 🤯 toCharArray 같은 함수를 써보면서 코드를 끄적여봤지만 에러가 날 가로막네 ^^,,,

그래서 보다 쉬운 방법이 없을까 생각하다가 그냥 단순히 str을 순회하면서 i번째 요소i+1번째 요소부터 끝까지를 다시 순회하며 비교해주는 방식을 떠올렸다. 5줄 남짓한 코드를 작성하니 바로 테스트 통과...!!!!!!


+) 레퍼런스 코드에는 HashMap을 이용해서 입력받은 문자열을 저장하고, containsKey를 활용하여 동일한 문자열이 존재하는 지 탐색하는 방법을 사용하고 있었다. 관련해서 크루님께 여쭈어보았는데,
레퍼런스 코드의 containsKey의 복잡도는 O(1)이고, 하위 차수를 고려하지 않기에 O(n)이 되겠다.
반면, 내가 작성한 이중반복문은 false에 걸리지 않을 경우는 두 번 순회하기 때문에 복잡도는 O(n^2)가 된다.
따라서 레퍼런스 코드가 더 좋은 코드라고 할 수 있겠다.
관련해서 크루님께서 메서드에 따라 복잡도를 더 쉽게 계산하도록 참고할만한 링크를 공유해주셨다.
https://www.grepiu.com/post/9

profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글