자료구조와 알고리즘/SW Expert Academy

[SW Expert Academy][D3][C++] 7102 - 준홍이의 카드놀이

최문경 블로그 2019. 10. 14. 23:08

https://swexpertacademy.com/main/code/problem/problemDetail.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

(문제를 여기에 적고 싶지만 무단 복제 금지라고 써있다...)

 

동아리에서 푼 문제! 내 풀이와 다른 동아리 부원의 풀이를 요약해서 작성!

 

 

 

내 풀이

 

요약:

먼저, 떠올린 것이 더해서 나오는 숫자를 인덱스로 해서 그에 해당하는 값이 나올 때 마다 인덱스(더해서 나온 숫자)에 있는 값을 1씩 증가시켜주면 되겠다고 생각했다.

 

N과 M은 4부터 20사이의 숫자이므로 N+M의 최대값은 40!

 

따라서, 크기가 40인 int형 배열을 선언해준 뒤 0으로 초기화하고,

이중 for문을 이용해 더해서 나오는 숫자를 index로 생각해서 그에 해당하는 값을 1 올려주었다.

그러면 최대값을 가지고 있는 index가 곧, 더해서 가장 많이 나오는 숫자가 될 것이다.

 


다른 동아리 부원의 풀이 (C++)

 

 

요약:

이 풀이는 코드만 봤을 때는 잘 이해가 되지 않지만, 훨씬 더 간단하고 빠른 코드임에는 틀림이 없다.

규칙을 이용해서 문제를 푼 것인데 그 규칙을 설명해보면,

 

먼저, N과 M이 같다고 해보자. (예를 들어, N=3, M=3이라고 해보자.)

 

 

이런 식으로 더했을 때, 같은 숫자끼리 같은 열에 써보면, N과 M이 같을 때에는 무조건 N+1 또는 M+1이 가장 많은 확률로 나온다는 것을 알 수 있다.

 

 

 

 

 

이번에는, N이 M보다 크다고 해보자. (예를 들어, N=4, M=3 라고 해보자.

 

 

같은 방식으로 써보면 신기하게도, 이렇게 사다리꼴 모양으로 나온다는 것을 알 수 있다.

즉, 이런 방식으로 쓴다면 무조건 형태는 사다리꼴로 나오게 되고, 가장 많은 확률로 나오는 숫자는 M+1부터 N+1까지라는 것을 알 수 있다.

 

마찬가지로, M이 N보다 큰 경우도 같을 것이다. 다만 N+1부터 M+1까지 일 것이다.

 

( 처음 들었을 때 이해 안되서 종이에 직접 써봤다.. 혹시 이해가 안된다면 직접 종이에 써보시길..!)