본문 바로가기

코딩테스트2

HashSet의 contains보다 if가 더 빠를 수도 있다. (LeetCode. 1456) 리트코드 문제Intuition해당 문자(char)가 모음(a,e,i,o,u)인지 확인하는 코드가 있었다.처음에는 모음을 가지고 있는 HashSet을 만들어 contains 메소드를 통해 O(1)의 속도로 모음이 존재하는 지 곧바로 확인하는 방식을 떠올렸다. 최악의 경우 영어의 모음 5개를 모두 확인하는 것보다 바로 해시값으로 해시테이블에 접근하여 한번에 데이터 유무(존재한다면 모음)을 판단하는 것이 더 빠르지 않을까라고 생각했기 때문이다. if의 O(5)보다 HashSet의 contains의 O(1)가 더 느리다.? 하지만, if를 활용하여 쇼트서킷 없이 모든 모음을 모두 순환하여 확인하는 경우보다 HashSet을 생성하여 contains여부를 확정적으로 한번 가져오는 동작이 더 긴 것으로 보인다. 이는.. 2024. 9. 20.
(a+b)/2 과 a+(b-a)/2 의 차이 (feat. Integer Overflow, Leetcode 374) (a+b)/2 과 a+(b-a)/2의 결과값은 같다.하지만 전자는 일시적으로 데이터 타입의 허용범위를 넘길 수 있다.  겪은 문제코딩테스트 중 입력받은 int n 값이 int의 최대허용범위 근처의 큰 수일때만 통과하지 못 했다.  int 타입의 start, end 변수 두 개가 있다.경우에 따라 start의 값을 mid+1로 변경하는 분기가 존재한다. 첫번째 시행n의 값이 int 타입의 최대 허용범위에 근접해있고, 약 2억이라 표현해본다.start=1, end=2억 인 셈이다. 이 때의 mid 값을 구하기 위한 start+end값은 약 2억으로 허용범위를 초과하지 않는다.start=1억 정도의 값으로 변경되며 시행 마무리두번째 시행int mid 값을 연산하기 위해 end+start의 값을 구할때, 2억+.. 2024. 8. 30.