사용 언어 - Python3
문제 - 전쟁 - 땅따먹기
정답
이분 탐색 문제 (정답 맞춘 여부 X)
0. 입력 및 풀이방법
총 N개 테스트진행
A 리스트 저장. 첫번째 원소는 땅의 병사수, 두번째부터 각각 병사의 군대번호
우리는 가장 많이 지배한 병사의 군대번호를 구하고, 땅의 병사수의 절반을 초과하는지 확인해야한다.
1. Counter 클래스 사용
from collections import Counter
Counter(리스트명).most_common(n=1)
리스트의 원소 개수가 많은 순으로 정렬 -> n=1 가장 첫번째에 있는, 가장 개수가 많은 값 출력
counter = [('a',3)]의 형태로 저장 ('a' 원소가 3개 있다. 가장 많다.)
땅을 지배한 군대 번호를 출력해야 하므로 원하는 값은 counter[0][0]이다.
2. 한 번호의 군대의 병사가 절반을 초과하는 조건
count = A.pop(0) 가장 첫번째 원소(땅의 변사수)를 삭제 + count 변수에 저장
int(count) / counter[0][1] < 2.0
예제처럼 A가 [10,1,2,3,1,2,3,1,2,3,1] 인 경우, int(count) = 10이고 counter[0][1] = 4이다.
4는 10의 과반수가 아니기 때문에 조건 충족 X
import sys
from collections import Counter
input = sys.stdin.readline
N = int(input())
for i in range(N):
A = list(map(int, input().split()))
count = A.pop(0) #병사수
counter = Counter(A).most_common(n=1) #가장 많은 병사.땅을 지배한 병사
if int(count) / counter[0][1] < 2.0: #과반수 넘는다면
print(counter[0][0])
else:
print('SYJKGW')
레퍼런스
- Counter 클래스 사용법
- 정답 깃허브
'Algorithm > 구현' 카테고리의 다른 글
[Python3] 백준 1002번 터렛 (0) | 2023.04.07 |
---|---|
[Python3] 백준 1449번 수리공 항승 (0) | 2023.04.05 |
[Python3] 백준 1004번 어린 왕자 (0) | 2023.04.02 |
[Python3] 백준 1063번 킹 (0) | 2023.03.31 |
[프로그래머스 lv1] 크기가 작은 부분 문자열 (1) | 2023.01.25 |
댓글