koistudy.net 에는
초등학생, 중학생, 고등학생, 대학생, 대학원생, 일반인, 군인, 프로그래머, 탑코더 등 아주 많은 사람들이 들어와 문제를 풀고 있는데, 가입하고 Guest Board를 통해 정회원으로 등업이 되어야 문제를 풀어볼 수 있다.
매 시간의 실시간 채점 정보는 메뉴의 Judge Status 를 통해 살펴볼 수 있다.
자! 여기서...잠깐..
같은 날 동시에 가입한 3명의 사람들이 koistudy.net을 들어와 문제를 푸는 날짜가
매우 규칙적이라고 할 때,
다시 모두 함께 문제를 풀게 되는 그날은 언제일까?
예를 들어 3명이 같은날 가입/등업하고, 각각 3일 마다, 7일 마다, 9일 마다 한 번씩 들어온다면, 처음 가입하고 63일 만에 다시 3명이 함께 문제를 풀게 된다.
같은 날 동시에 가입한 인원 3명이 규칙적으로 방문하는, 방문 주기가 공백을 두고 입력된다.
(단, 입력값은 100이하의 자연수이다.)
3명이 다시 모두 함께 방문에 문제를 풀어보는 날(동시 가입/등업 후 며칠 후?) 을 출력한다.
3 7 9
63
이 문제를 수학에서 배운 최소 공배수로 풀 수도 있고 그게 귀찮다면 아래 코드처럼 전수 조사를 할수도 있다.
day는 날 수, a/b/c는 방문 주기이다.
...
day=1;
while(day%a!=0 || day%b!=0 || day%c!=0) day++; //이게 무슨 의미일까?
printf("%d", day);
...
물론, 아주 많은 다양한 방법이 있을 수 있다.
informatics의 문제 해결에 정답은 하나가 아니라...
지정된 시간내에 정확한 결과를 얻을 수 있는 모든 방법이 정답이다.
따라서, 모든 문제들에는 정답이 하나 뿐 만이 아니다.
새로운, 더 빠른, 더 간단한 방법을 다양하게 생각해보고 도전해 보기 바란다.
참고로 최소공배수를 구하는 알고리즘은 유클리드의 호제법을 써서 최대공약수를 구하면 간단히 구할 수 있다.
유클리드 호제법은 다음과 같다.
2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a>b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이 성질에 따라, b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다. [출처:위키백과]
최소공배수는 두 수를 곱하고 두 수의 최소공배수로 나누면 된다.
'Programming > Codeup.kr기초100제 && 컴퓨터 이야기' 카테고리의 다른 글
[기초-종합+배열] 이상한 출석 번호 부르기2 (1) | 2017.02.01 |
---|---|
[기초-종합+배열] 이상한 출석 번호 부르기1 (0) | 2017.01.31 |
[기초-종합] 수 나열하기3 (0) | 2017.01.29 |
[기초-종합] 수 나열하기2 (0) | 2017.01.28 |
[기초-종합] 수 나열하기1 (0) | 2017.01.27 |