X = [8, 8, 14, 14, 3, 3, 13]


def value_Card(X) :

    counter = [0] * 15

    for i in X:

        counter[i] = counter[i] + 1

    X.sort(key=lambda x: (-counter[x], -x))

    return X


print(value_Card(X))

>>> [14, 14, 8, 8, 3, 3, 13]


밑에서 알려주신 분 굉장히 잘 됩니다. 일단 너무나 감사드리고요.


제가 하는게 포커에 페어 알고리즘 부분인데요.

노페어/원페어/드리플/풀하우스 부분은 다 잘 되는데


문제는 투페어하고 포카드 좀 문제가 있습니다.

위 알고리즘이 잘못됐다는 것이 아니라 제가 원하는 형태가 완벽하게 구현 안된다는 것입니다.


투페어에서

페어 두쌍에(4장)에 나머지 다 다른(3장)은 문제가 없는데

페어 세쌍(6장)에 나머지 다른거(1장)일 때, 문제가 좀 있습니다.


주어진 데이타로 X = [8, 8, 14, 14, 3, 3, 13] 넣으면

>>> [14, 14, 8, 8, 3, 3, 13] 이게 출력됩니다.

이거 포커에서 어떤 의미냐면 A원페어가 있고 8원페어가 있고 3원페어가 있고 킹이 있다.

근데 포커에서는 A원페어하고 8원페어까지만 페어로서는 의미가 있고

나머지는 키커라해서 가장 높은 숫자인 킹이 의미있습니다.(3원페어는 의미가 없습니다.)

그래서 제가 원하는건 출력 내용은 이렇게 입니다.

>>> [14, 14, 8, 8, 13, 3, 3]


마찬가지로 포카드도 문제가 있습니다.

포카드(4장)와 나머지 다른 3장일 때는 문제가 없고,

포카드(4장)와 드리플도 역시 문제가 없습니다.

문제는 포카드(4장)와 원페어(2장) 그리고 나머지 한 장일 때 문제가 있습니다.


예를 들어 Y = [3, 12, 3, 3, 10, 10, 3]이라면

>>> [3, 3, 3, 3, 10, 10, 12] 이게 출력됩니다.

근데 포카드가 되면 나머지 키커는 그냥 가장 높은 숫자인 12(퀸)이 되서

10원페어는 의미가 없습니다.

그래서 제가 원하는 출력 형태는

[3, 3, 3, 3, 12, 10, 10]입니다.


X.sort(key=lambda x: (-counter[x], -x))이 부분을 건들어서 

if문으로 처리해야 될거 같은데

제가 실력이 부족하고 특히 람다 함수는 너무 어려워서 어려워서 어케해야될지 잘 모르겄습니다.


결과적으로 최종적으로 제가 원하는 것은 7장에서 카드에서 

포커 페어 종류의 족보로 의미있는 순서로

첫장부터 다섯번장까지 출력되기를 원하는 형태입니다.


홀덤이나 세븐오디 겜 모르시는 분은 제가 무슨 소리 하는지 잘 모르실 수 있습니다.


고수분들의 많은 도움 기다립니다!