10달 전부터 시도했지만, 도저히 풀리지 않아서 냅두었다. 처음 문제를 보고 정말 쉬워보였다.. 하지만 풀면 풀수록 타입은 어떻게 정해야 하는지, 나눗셈의 또 다른 공식은 없는지 등에 대한 여러가지 문제점들이 있었다. 가장 먼저 파악한 것은 나눗셈의 공식이었다. 자세한 공식은 코드에서 다루어보도록 하겠다. 나눗셈의 공식에 대해 이해를 하게 되어 그것을 처음에는 숫자로 구현하였다. int temp = n; for(int i = 0; i < 9; i++) { if(temp % k != 0) { temp = temp % k; temp = temp * pow + n; } else { break; } count++; } 대충 이런식이었다. 여기서 잘못된 점은, temp의 설정을 int형식으로 하여 더 긴 숫자에 ..
알고리즘을 풀 때에 set과 list의 선택은 중요하다. 당연히 어떤 key를 가지고 사용하는 문제이거나, 값을 빨리 찾기 위한 의도를 가지고 있다면 set을 사용하는게 맞지만, 그 중간점에 있는 애매한 문제들도 여러 개 있다. 사실 사이즈가 정해져있으면 배열을 사용하는게 맞다고 생각하지만, 제한된 시간안에 풀어야 하는 문제라면 컬렉션을 사용해서 풀 문제들도 있을 것이다. 수 찾기에서는 set을 사용했다. 값을 일차적으로 넣은 상태에서 이후에 나오는 수가 초기에 세팅한 값인지 알기 위해서는 그 해당 값을 찾아야 한다. 즉, 추가와 삭제에 대한 문제가 아닌, 검색에서 성능차이가 발생하는 문제라는 것이다. 수 찾기 문제에서는 명확한 알고리즘을 생각해내지 못해 틀린 사람에 대한 비율보다, 효율성테스트에서 떨어..
사실 상 size가 정해지면 list를 만들 필요 없이 배열로 해도 된다. 하지만 이 문제에 대해서는 배열을 활용하기 위한 것이 아닌, list를 활용하여 문제를 풀어보기 위함이었다. ArrayList를 활용할 것인가, LinkedList를 활용할 것인가에 대해 많은 고민과 테스트가 있었다. 우리가 흔히 알고 있는 각각의 장단점은 ArrayList에서 만큼은 값을 검색하는 능력이 빠르고, 값의 추가 삭제가 느린 대신에, LinkedList는 값을 검색하는 것이 느리며 값의 추가 삭제가 빠르다는 것이다. 그런데 문제를 풀어보면 풀어볼수록 이상한 결과가 나왔다. 요세푸스문제의 경우 값이 중간중간에 계속 빠지는 부분이 있다보기에 LinkedList를 활용하여 값을 관리하려고 했다. 하지만 ArrayList가 ..