hyuk2841   3년 전

하지만 도무지 이해가 안됩니다.

제가 이해가 안되는 부분은 

앞면의 O와 뒷면의 O중 작은 것과

앞면의 X와 뒷면의 X중 작은 것을 더해서 구하는 똑같은 모양을 찾는 최댓값인데,

수학을 잘 못해서 그런지 왜 그 공식이 최댓값인지 이해가 잘 안됩니다. 

appie701   3년 전

n = 7

m = 3

k = 4인 경우

우선 카드들의 앞면에는 O가 3개 (m개) X가 4개 칠해져있다는 의미이므로 카드들을 일렬로 나열해보면

앞: O O O X X X X 이렇게 카드들을 나열해볼 수 있습니다.

여기에 뒷면에 O를 4개 (k개) 칠하고 나머지 3개는 X로 칠해야 하는데 아무렇게나 막 칠해보겠습니다

(위 아래로 한쌍이 되어 각 카드의 앞뒷면을 의미하도록 나열한거라고 보심 됩니다)

앞: O O O X X X X

뒤: O X O O X X X

이러면 앞 뒷면이 동일한(위, 아래가 동일한) 카드는 왼쪽 부터 순서대로 1,3,5,6,7번째 카드입니다(굵게표시된). 즉 앞뒷면이 동일한 카드는 5장이 되는거죠.

그럼 카드를 나열할 때, 앞면을 기준으로 O를 왼쪽에 X는 전부 오른쪽에 오도록 나열한다고 치면 (위에서 했듯)

이제 뒷면도 O는 전부 왼쪽에 있는 카드부터 적고 X는 전부 오른쪽에 있는 카드부터 적어야 앞뒤가 동일한 문자가 적힌 카드의 수가 최대가 될 것입니다 (아래와 같이요)

앞: O O O X X X X (O: m개 | X: n-m개)

뒤: O O O O X X X (O: k개 | X: n-k개)

이때 나열된 카드 중 왼쪽부터 min(m,k)개는 O가,

오른쪽부터 min(n-m,n-k)개는 X가 적혀있을 것입니다.

그리고 이외의 중간에 있는 카드들은 앞면과 뒷면에 적힌 문자가 다르게됩니다.

결과적으로

-> m개가 k개 보다 작고

-> n-k개가 n-m개 보다 작으므로

=> 앞뒷면 같은건 m + n-k 개

=> 3 + 3 = 6개의 카드가 앞뒷면이 같게 됩니다.

위의 케이스와 아래 케이스를 비교하면서 생각해보시면 도움이 될 것 같습니다. 

그리고 저렇게 종이에 적어서 위아래에 m,k,n-m,n-k개 를 묶음 표시 적어보시면 이해에도 더 도움이 되실 것 같습니다.

만약 

n = 7

m = 4

k = 3인 경우

앞: O O O O X X X (O: m개 | X: n-m개)

뒤: O O O X X X X (O: k개 | X: n-k개)

-> k개가 m개보다 작고

-> n-m개가 n-k개보다 작으므로

=> 앞뒷면 같은건 k + n-m 개

=> 3 + 3 = 6개

도움이 되셨기 바랍니다!!

hyuk2841   3년 전

설명 감사합니다. 도움 많이 되었습니다.

저도 처음에는 문제를 보고 그림으로 그려서 했는데, 그림으로 그려서 머릿속으로는 똑같은 개수를 구할 수는 있는데,

머릿속에 있는 걸 코드로 짜려고 하니 백지상태가 되더군요ㅠㅠ

appie701님이 그림+코드 설명도 해주시니 이해가 더 쉽게 됬습니다 감사합니다.

혹시 문제는 O,X 똑같은 갯수를 구하는거였는데, 반대로 다른것을 구할 때는 어떤방법으로 하면 좋을까요? 

hyuk2841   3년 전

아 !!! 바보같이 또 질문했네요!! 

반대로 다른것을 구하는건 그냥 O의 갯수만 빼면 되는군요ㅠㅠ 죄송합니다~~

appie701   3년 전

아닙니다 지금봤네요 도움이 되셨다니 다행입니다 ㅎㅎ

댓글을 작성하려면 로그인해야 합니다.