알고리즘/python

[백준/Python] 1270번: 전쟁 - 땅따먹기

minliz 2025. 4. 3. 17:47

목차

📝 문제

🎯 알고리즘 핵심 단계

✅ 실습 인증 파트_코드

⚡ 트러블 슈팅

🤔 이것도 한 번 생각해봐요! (참고 자료)


https://www.acmicpc.net/problem/1270

 

📝 문제

드디어 전쟁은 전면전이 시작되었고, 서로 땅을 따먹기 시작했다.

현재 여러 지역은 한창 전쟁이 벌어지고 있는 상황인데, 어느 지역은 거의 전쟁이 마무리 단계로 가고 있다.

하지만 당신은 군대를 보낼 때 적군을 혼란시키기 위해서 우리 나라의 군대라는걸 표시하지 않고, 군대의 번호로 표시했다.

어느 땅에서 한 번호의 군대의 병사가 절반을 초과한다면 그 땅은 그 번호의 군대의 지배하에 놓이게 된다.

이때, 각 땅들을 지배한 군대의 번호를 출력하여라. 만약, 아직 전쟁이 한창중인 땅이라면 “SYJKGW”을 쌍 따옴표 없이 출력한다.

 

입력

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

 

출력

첫째 줄에는 각각의 땅의 상태를 순서대로 출력한다. 만약 땅이 지배가 되어있다면 그 지배한 병사의 번호를 출력하고, 아니라면 “SYJKGW”을 쌍 따옴표 없이 출력한다.


🎯 알고리즘

💡 문제 이해

 

  • 여러 전투에서 병사들이 싸운다.
  • 한 전투에서 병사 수의 절반을 초과한 병사 번호가 있으면 그 병사가 땅을 차지한다.
  • 절반을 초과하는 병사가 없으면 "SYJKGW"를 출력한다

 

💡 문제 접근

 

  • 입력 처리:
    • n: 전투 횟수 입력
    • 각 전투별로 병사들의 정보를 리스트로 저장
  • 병사 수 카운트:
    • 딕셔너리(dict)를 사용하여 각 병사 번호별 등장 횟수를 저장
  • 최대 등장 병사 찾기:
    • max(딕셔너리, key=딕셔너리.get) 을 이용하여 가장 많이 등장한 병사 번호 찾기
  • 절반 초과 여부 확인:
    • 만약 최다 등장 병사 수가 (전체 병사 수 / 2) 초과하면 그 병사 번호 출력
    • 그렇지 않으면 "SYJKGW" 출력

 


✅ 실습 인증 _코드

n= int(input())
for _ in range(n):
  data = list(map(int, input().split()))
  count = data[0]
  people = data[1:]

  counts={}
  for person in people:
    counts[person] = counts.get(person,0) +1

  maxPerson = max(counts, key=counts.get)
  if counts[maxPerson] > (count//2):
    print(maxPerson)
  else:
    print("SYJKGW")

 

'알고리즘 > python' 카테고리의 다른 글

[백준/Python] 1547번: 공  (0) 2025.04.04
[백준/Python] 1940번: 주몽  (1) 2025.04.04
[백준/Python]1235번: 학생 번호  (0) 2025.04.03
[백준/Python] 1076번: 저항  (1) 2025.04.03
[백준/Python] 1075번: 나누기  (0) 2025.04.02