그냥 하는 노트와 메모장

Algospot - 어린이날 (CHILDRENDAY) 본문

Solved problems

Algospot - 어린이날 (CHILDRENDAY)

coloredrabbit 2018. 7. 3. 17:25

* Algospot - 어린이날 (CHILDRENDAY, https://algospot.com/judge/problem/read/CHILDRENDAY)

  [ 분류 - BFS/ Mathematics ]


  접근 방식이 다소 까다롭다.

  N명 중 M이 하나씩 더 받기 위해선 N%ans = M이며 이 나머지에 대해 사이클이 존재함을 알아야 한다. 또한 이를 증명하는 페르마의 소정리에 대해 알고 있어야 한다.


  * 접근 방법

    1. 찾고자 하는 ans에 대해 N%ans = M이기 위해선 기저(시작 지점)은 숫자(한자리 수)부터 시작한다. 여기에 하나씩 이어붙이며 진행하는 BFS를 구성한다.

    2. 나머지이기 때문에 후보를 [0, N]으로 줄일 순 없다. 적어도 하나 이상의 장남감을 줘야하기 때문에 [0, 2*N]가 후보가 된다. N과 같거나 큰 수는 정답의 후보가 된다. 이 부분이 적어도 하나 이상의 선물을 받을 수 있다는 여지를 주는 것이다. 따라서 N보다 크거나 같은 부분에 나머지가 M이 나오는 최초의 값이 답이 된다.

    3. visited[]를 단순 배열이 아닌 이전 값을 쫓아 갈 수 있도록 소스를 구성한다. 이 부분은 최대유량(벨만)에 유용하게 사용되므로 익혀두면 좋다.




Comment : 1,3은 맞았으나 2.에서 범위를 [0, N]으로 두고 풀어서 결국 책을 본 문제다. 좀 아쉽다 ㅠ



- 코드


'Solved problems' 카테고리의 다른 글

BOJ 2549 - 루빅의 사각형  (0) 2018.08.07
Algospot - 정렬 게임(SORTGAME)  (0) 2018.07.03
BOJ 3987 - VOYAGER (보이저 1호)  (0) 2018.07.03
BOJ 6084 - Laserphones (레이저 통신)  (0) 2018.07.02
BOJ 5213 - TOTEM (과외맨)  (0) 2018.07.02
Comments