본문 바로가기
Algorithm/구현

[Python3] 백준 1270번 전쟁 - 땅따먹기

by HANNI하니 2023. 4. 5.

사용 언어 - Python3

문제 - 전쟁 - 땅따먹기

 

1270번: 전쟁 - 땅따먹기

첫째 줄에는 땅의 개수 n(n<=200)이 주어진다. 그리고 두 번째 줄에서 n+1번째 줄에는 제일 처음에 숫자 Ti(i번째 땅의 병사수, Ti<=100,000)와, Ti개의 숫자 (각각 병사의 군대 번호)가 주어진다. i번째 땅

www.acmicpc.net

 

 

정답

이분 탐색 문제 (정답 맞춘 여부 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')

 

 

 


  • 정답 깃허브
 

GitHub - yyeongeun/codingtest: 코딩테스트 공부

코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.

github.com

 

댓글