프로그래머스 코딩테스트 소수 찾기(완전탐색)
오늘은 프로그래머스 완전탐색에 있는 소수찾는 문제를 풀어보았다. 실제로는 풀지 못하였고, 소수를 찾기 위하여 제곱근을 사용하는 방법까지는 알고 있었지만,
재귀함수를 통하여 나올 수 있는 모든 수를 탐색하는 것이 아직 너무 익숙치 않았다.(재귀함수 ㅂㄷㅂㄷ…)
풀어보기
코드는 숨어보는 IT님의 코드를 참고하여 만들었고, 중요한 부분은 소수를 찾는 부분보다 들어온 문자열을 가지고
나올 수 있는 모든 수를 찾는 것이 더 중요한 것 같다. 해당 코드에서는 boolean값으로 처음 cycle메소드를 호출하였을 때 해당하는 수를 true로 바꿔주고
true라면 다시 쓰이지 않도록 하였다. 또한 마지막에 다시 false로 바꿔주며 start가 증가할 때 처음부터 확인하기 위하여 설정이 되어 있다. end는 호출하는 곳의
i값을 써서 1자리수 2자리수 3자리수로 나올 수 있는 값들을 알아내기 위한 것이다.
재귀함수를 이용하여 알고리즘 문제를 푸는 것이 아직 익숙치 않고, 이렇게하면 되지 않을까하는 생각은 들지만 머리로 순간적으로 그려지지 않다보니 많은 어려움을
겪는 것 같다. 많은 시간 투자와 노력이 필요하지 않을까 싶다. 완전탐색 또는 BFS DFS에 재귀함수를 조금 적극적으로 써볼 필요성이 느껴진다. 그리고 조합을 풀 때
boolean값으로 방문한 값을 확인하는 것을 많이 쓰기 때문에, 알아두고 두고두고 사용하여야할 것 같다.
알게 된 것
- Math.sqrt() : 숫자의 제곱근을 구해주는 메소드이다.
- flag를 이용한 완전탐색: false와 true로 각 자리의 숫자가 쓰인적이 있는지 확인하는 기법이 많이 사용되는 것 같다. 익숙해지자.