알고리즘/BOJ

백준 2981번 검문

꾸준함. 2019. 8. 8. 01:59

문제 링크입니다: https://www.acmicpc.net/problem/2981

 

2981번: 검문

문제 트럭을 타고 이동하던 상근이는 경찰의 검문을 받게 되었다. 경찰은 상근이가 운반하던 화물을 하나하나 모두 확인할 것이기 때문에, 검문하는데 엄청나게 오랜 시간이 걸린다. 상근이는 시간을 때우기 위해서 수학 게임을 하기로 했다. 먼저 근처에 보이는 숫자 N개를 종이에 적는다. 그 다음, 종이에 적은 수를 M으로 나누었을 때, 나머지가 모두 같게 되는 M을 모두 찾으려고 한다. M은 1보다 커야 한다. N개의 수가 주어졌을 때, 가능한 M을 모두 찾는

www.acmicpc.net

수학적 사고를 요구하는 문제였습니다.

어떠한 숫자를 m으로 나누었을 때 나머지가 r이라면 해당 숫자는 아래와 같이 표기할 수 있습니다.

v[i] = m * temp[i] + r

 

따라서, 나머지 r을 지워주기 위해서는 같은 나머지를 같는 숫자를 빼주면 되는데 이는 아래와 같이 표기할 수 있습니다.

v[i] - v[i - 1] = m * (temp[i] - temp[i-1]) + (r - r)

 

따라서, N개의 숫자를 입력받고 오름차순으로 정렬해준 뒤 (v[i] - v[i-1])의 최대공약수를 구한 뒤, 최대공약수의 약수를 오름차순으로 나열하면 되는 문제였습니다.

 

* 유클리드 호제법을 사용하는 문제가 간혹 있으므로 최대공약수를 구하는 함수는 외워두는 편이 좋습니다.

 

 

개발환경:Visual Studio 2017

 

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 15650번 N과 M(2)  (2) 2019.08.21
백준 2775번 부녀회장이 될테야  (0) 2019.08.11
백준 2858번 기숙사 바닥  (2) 2019.08.08
백준 17136번 색종이 붙이기  (12) 2019.08.06
백준 17135번 캐슬 디펜스  (0) 2019.08.06