'2015/08/20'에 해당되는 글 2건

  1. 2015.08.20 더블릿_worldcup
  2. 2015.08.20 더블릿_rprime

어떻게 구해야 하나 고민을 쫌 했는데 이리저리 생각해보다가

너무 작게 생각하지 않고 전체 게임에서 도출 해 낼 수 있는 점수와 실제 팀들이 받은 점수들을 비교하면 답을 구할 수 있을 것 같았다. 


조금 더 자세히 설명해보자면

이기면 3점, 비기면 1점, 지면 0점의 스코어를 각 팀들이 가져간다고 했다. 

경기는 두 개의 팀이 있어야만 이루어지는 것이다. 그렇다면 한 경기에서 

이기거나 지는 경기에서는 두 팀 중 어느 한팀이 3점을 반드시 가져가게 된다. 

하지만 비기게되면? 두 팀은 각자 1점씩을 가져가게 되어 2점이 발생하게 된다. 

대회 주최측 입장이라면 이기거나 지는 게임은 3점, 비기는 게임은 원래 발생할 수 있는 점수에서 1점이 부족하게 발생한다. 


모든 경기의 수에서 3점을 곱해준 값은 대회측에서 모든 경기에서 발생할 수 있는 승점을 의미하며, 

모든 경기에서의 승점 - 실제 각 팀들의 점수들의 합 = 예상치에서 손실된 점수(비긴 경기의 승점)

을 의미한다. 한 개의 비긴 경기는 이기거나 진 경기와 1점 차이가 나므로 

위의 계산 값이 비긴 경기의 수를 의미한다. 


설명을 잘 못해서 쉬운 문제를 어렵게 설명한 듯하지만 실제로는 간단하게 풀 수 있는 문제다. 


'알고리즘문제풀이' 카테고리의 다른 글

더블릿_rprime  (0) 2015.08.20
2591_숫자카드  (0) 2015.05.01
2564_경비원  (0) 2015.04.30
2565_전깃줄  (0) 2015.04.29
2505_두번뒤집기  (0) 2015.04.28
Posted by slender ankles
,

서로 소라는 단어에 대해서 로직을 생각해내는 것이 핵심인 문제 같다. 

더 좋은 방법이 있을 수도 있지만(서로소의 성질을 이용해서 답을 도출해내는 등등)

나는 단순하고 무식하게 풀었다. 


두 숫자 input_a, input_b가 있다면

1) 두 숫자 중에 더 작은 수를 찾아냈다.

=> 작은 숫자의 약수를 구하는 이유는 작은 숫자가 큰 숫자보다 for문을 조금이라도 덜 돌수있기때문이다. 큰상관은 없다.

2) 1부터 작은 수까지 for문을 돌면서 작은 수의 약수를 모두 구해서 배열에 담아 두었다. 

3) 큰 숫자를 구해진 작은 수의 약수들로 나누어보아서 나누어지면 두 수는 서로소가 아니다.

어느 숫자로도 나누어지지 않으면 두 수는 서로소이다. 

물론 구해진 약수 중 1은 제외이다. 1은 어느 숫자라도 약수로 가지기 때문이다.


답이 제대로 나온다. 

이렇게 1000까지는 다소 후한 제약조건이 있는 경우에는 위와 같은 방법으로도 충분히 풀 수 있으므로 

크게 고민 할 필요가 없다. 

다만 숫자가 커지거나 하면 다른 방법을 생각해봐야 한다.  

'알고리즘문제풀이' 카테고리의 다른 글

더블릿_worldcup  (0) 2015.08.20
2591_숫자카드  (0) 2015.05.01
2564_경비원  (0) 2015.04.30
2565_전깃줄  (0) 2015.04.29
2505_두번뒤집기  (0) 2015.04.28
Posted by slender ankles
,