[알고리즘 연습 문제 #8] 접속 기록으로부터 비밀번호 알아내기 :: 소림사의 홍반장!

Java 자바 연습 문제 #8] 접속 기록으로부터 비밀번호 알아내기



온라인 뱅킹에서 흔히 쓰이는 보안 기법 중에는, 비밀번호에 포함된 숫자를 랜덤하게 세 개 입력하도록 하는 것이 있습니다. 


예를 들어 531278이라는 비밀번호에 대해서 2번째, 3번째, 5번째 숫자를 입력하도록 하는 식입니다. 이 때 올바른 입력은 317이 됩니다.


첨부한 텍스트 파일 keylog.txt 에는 로그인에 성공한 어떤 사용자의 입력 기록이 50건 담겨져 있습니다. (비밀번호의 길이는 알 수 없습니다)


3개의 숫자는 항상 앞쪽부터 순서대로 요청된다고 할 때, 위의 접속 기록에서 알아낼 수 있는 가장 짧은 길이의 비밀번호는 무엇입니까?


keylog.txt 내용

 319 680 180 690 129 620 762 689 762 318

 368 710 720 710 629 168 160 689 716 731

 736 729 316 729 729 710 769 290 719 680

 318 389 162 289 162 718 729 319 790 680

 890 362 319 760 316 729 380 319 728 716


프로젝트 오일러 문제 발췌 http://projecteuler.net/


댓글로 소스 및 정답, 수행시간 공유해보아요~ㅎ



요건 해설이 좀 필요할 것 같아서 풀어서 정리합니다.


1. Java TreeSet 을 이용한 풀이 ( 수행시간 : 5,011,559 ns (약 5ms) )


* 접근방법


- 숫자의 중복을 피하고 자동적으로 순서를 정렬하기 위하여 TreeSet 을 이용함.


- TreeSet 생성시 Custom Comparator를 구현하여 자동으로 순서 정렬함.




* 코드





2-2. 직접 제작한 PasswordExtractor 을 이용한 풀이 수행시간 : 2,965,597 ns (약 3ms) )


* 접근방법


- 처음 시작하는 숫자를 기준으로 기준 숫자 앞에 위치하는 숫자, 뒤에 위치하는 숫자를 찾아 트리구조를 형성함. 재귀호출 필요.


- 각 숫자를 한 노드라 하면 노드에는 숫자정보와 전위 노드, 후위 노드의 정보가 들어있어야함.


- 정보 및 실행 순서 도식화







* 코드







다른 카테고리의 글 목록

Dev.연습문제 카테고리의 포스트를 톺아봅니다