https://www.acmicpc.net/problem/1524
1524번: 세준세비
첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 100보다 작거나 같다. 각 테스트 케이스는 다음과 같이 이루어져 있다. 첫째 줄에 N과 M이 들어오고, 둘째 줄에는 세준이의 병사들의 힘이 들어
www.acmicpc.net
문제
세준이와 세비는 온라인 게임을 즐겨한다. 이 온라인 게임에서는 군대를 서로 키울 수 있다. 세준이는 N명의 병사를 키웠고, 세비는 M명의 병사를 키웠다.
이제 서로 전쟁을 하려고 한다.
전쟁은 여러 번의 전투로 이루어진다. 각 전투에서 살아있는 병사중 제일 약한 병사가 죽는다. 만약 제일 약한 병사가 여러 명이고, 제일 약한 병사가 모두 같은 편에 있다면, 그 중에 한 명이 임의로 선택되어 죽는다. 하지만, 제일 약한 병사가 여러 명이고, 양 편에 모두 있다면, 세비의 제일 약한 병사 중 한 명이 임의로 선택되어 죽는다.
전쟁은 한 명의 병사를 제외하고 모두 죽었을 때 끝난다. 전쟁의 승자를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 100보다 작거나 같다. 각 테스트 케이스는 다음과 같이 이루어져 있다. 첫째 줄에 N과 M이 들어오고, 둘째 줄에는 세준이의 병사들의 힘이 들어오고, 셋째 줄에는 세비의 병사들의 힘이 들어온다. 힘은 정수이고, 이 값이 클수록 강하고, 작을수록 약하다.
각 테스트 케이스는 줄 바꿈으로 구분되어 있다.
출력
각 테스트 케이스에 대해서 한 줄에 하나씩 차례대로 승자를 출력한다. 세준이가 이기면 S를 세비가 이기면 B를 둘다 아닐 경우에는 C를 출력한다.
내 풀이
#40740kb 4004ms
test_case = int(input())
for _ in range(test_case):
input()
sejun, sebin = map(int, input().split())
s_power = sorted(list(map(int, input().split())))
b_power = sorted(list(map(int, input().split())))
while len(s_power)!= 0 and len(b_power)!=0:
if s_power[0] < b_power[0]:
del s_power[0]
elif s_power[0] >= b_power[0]:
del b_power[0]
if len(s_power) == 0:
print('B')
elif len(b_power) == 0:
print('S')
else:
print('C')
메모
처음엔 공백 입력 받는걸 안넣었고, 두번째엔 공백을 print()로 처리했더니 계속 런타임 에러가 발생
입력받는 과정 중간에 출력문이 껴있어서 오류가 발생했던 것이었다.
print()를 input()으로 처리하니 해결
리스트 안에 요소들을 제거하는데는 remove, pop, del 등 다양한 방법이 있다.
추가적으로 무조건 누군가의 병사가 없을때까지 반복하니까 'C'가 나오는 경우가 없는 것 같은데, 없는게 맞는 것 같다.
'파이썬 알고리즘 연습' 카테고리의 다른 글
[Python | 백준 1526번] 가장 큰 금민수 (0) | 2024.01.29 |
---|---|
[Python | 백준 1373번] 2진수 8진수 (0) | 2024.01.25 |
[Python | 백준 1357번] 뒤집힌 덧셈 (0) | 2024.01.24 |
[Python | 백준 1356번] 유진수 (0) | 2024.01.24 |
[Python | 백준 1296번] 팀 이름 정하기 (1) | 2024.01.24 |