-
1270. [Python]전쟁 - 땅따먹기Python_알고리즘/Silver III 2023. 5. 30. 22:50
1. 문제
https://www.acmicpc.net/problem/1270
2. 접근 방법
- 시간 제한: 10초
- 메모리 제한: 128MB
- 구현
3. 파이썬 코드
N = int(input()) for _ in range(N): # 나라와 병사들을 저장할 리스트 생성 countries = list(map(int,input().split())) # 나라에 병사들이 몇명있는지 체크할 딕셔너리 count_dict = {} # 1부터 ~ 끝까지가 병사들의 번호 for i in range(1,len(countries)): # 만약 병사 번호가 딕셔너리에 있으면 +1 없으면 추가 if countries[i] in count_dict: count_dict[countries[i]] += 1 else: count_dict[countries[i]] = 1 # 딕셔너리 value 에서 max 값을 찾아줌 max_value = max(count_dict.values()) # 찾은 max 값이 나라의 절반보다 크면 딕셔너리 item을 순회하며 value에 맞는 key 출력 if max_value > countries[0]/2: for k,v in count_dict.items(): if v == max_value: print(k) break else: print("SYJKGW")
4. 문제를 풀고난 후 생각
- 뭔가 이렇게 푸는 문제가 아닌 것 같지만 일단 내가 가진 지식선에서 풀어봤다.
- 2~N+1 까지 0번 자리에는 땅의 총 병사수 이후는 병사들의 나라들이 숫자로 나오는 형태이므로 리스트로 받았다.
- 딕셔너리를 통해서 각 땅에서 나라 병사들이 몇명 존재하는지 체크를 해줬다.
- 이후 max_value 값을 통해서 제일 병사가 많은 나라를 찾았고, 이 값이 땅에서 총 병사수의 절반이 넘을 경우 max_value와 값이 같은 key 값을 출력해주고 그 외의 경우는 SYJKGW 를 출력해주는 방식으로 해결했다.
- 뭔가 간단하게 푼 것 같다.
5. 문제를 푸는데 도움이 되는 지식
- 딕셔너리
'Python_알고리즘 > Silver III' 카테고리의 다른 글
1904. [Python]01타일 (0) 2023.06.05 2312. [Python]수 복원하기 (8) 2023.06.04 2149. [Python]암호 해독 (0) 2023.05.30 2407. [Python]조합 (0) 2023.05.26 1614. [Python]영식이의 손가락 (0) 2023.05.26