문제 링크

<aside> 💡 애드 혹/브루트포스 알고리즘

</aside>

Memory 114436KB Time 228ms Code Length 349B

from collections import Counter

N, M = map(int, input().split())
lamps = [input() for _ in range(N)]
K = int(input())

count = Counter(lamps)
count = sorted(list(count.items()), key=lambda x: -x[1])

answer = 0
for lamp, num in count:
    if K >= lamp.count('0') and (K - lamp.count('0')) % 2 == 0:
        answer = max(answer, num)

print(answer)

이 코드는 램프의 상태를 입력받아 주어진 조건에 따라 램프를 제어하는 문제를 해결하는 것이다.

먼저, collections 모듈의 Counter 클래스를 불러온다. 이 클래스는 요소의 개수를 세는데 사용된다.

다음으로, N과 M을 입력받는다. N은 램프의 개수, M은 램프의 상태를 나타내는 문자열의 길이이다.

램프의 상태를 나타내는 문자열들을 입력받아 lamps 리스트에 저장한다.

그 다음으로, 램프를 제어할 수 있는 횟수 K를 입력받는다.

Counter 클래스를 사용하여 lamps 리스트의 각 요소(램프 상태)의 개수를 세고, 이를 count 변수에 저장한다.

이후, count 변수의 요소들을 value 기준으로 내림차순 정렬하고, 이를 다시 count 변수에 저장한다.

answer 변수를 0으로 초기화하고, count 변수의 각 요소에 대해 다음을 수행한다.

램프 상태 문자열에서 '0'의 개수가 K보다 작거나 같고, K에서 '0'의 개수를 뺀 값이 짝수이면, answer 변수와 해당 램프 상태의 개수 중 더 큰 값을 answer 변수에 저장한다.

마지막으로, answer 변수를 출력한다. 이 값은 주어진 조건에 따라 램프를 제어했을 때, 동일한 상태를 가질 수 있는 램프의 최대 개수를 나타낸다.