
문제 설명
세준이와 세비는 온라인 게임을 즐겨한다. 이 온라인 게임에서는 군대를 서로 키울 수 있다. 세준이는 N명의 병사를 키웠고, 세비는 M명의 병사를 키웠다.
이제 서로 전쟁을 하려고 한다.
전쟁은 여러 번의 전투로 이루어진다. 각 전투에서 살아있는 병사중 제일 약한 병사가 죽는다. 만약 제일 약한 병사가 여러 명이고, 제일 약한 병사가 모두 같은 편에 있다면, 그 중에 한 명이 임의로 선택되어 죽는다. 하지만, 제일 약한 병사가 여러 명이고, 양 편에 모두 있다면, 세비의 제일 약한 병사 중 한 명이 임의로 선택되어 죽는다.
전쟁은 한 명의 병사를 제외하고 모두 죽었을 때 끝난다. 전쟁의 승자를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 100보다 작거나 같다. 각 테스트 케이스는 다음과 같이 이루어져 있다. 첫째 줄에 N과 M이 들어오고, 둘째 줄에는 세준이의 병사들의 힘이 들어오고, 셋째 줄에는 세비의 병사들의 힘이 들어온다. 힘은 정수이고, 이 값이 클수록 강하고, 작을수록 약하다.
각 테스트 케이스는 줄 바꿈으로 구분되어 있다.
출력
각 테스트 케이스에 대해서 한 줄에 하나씩 차례대로 승자를 출력한다. 세준이가 이기면 S를 세비가 이기면 B를 둘다 아닐 경우에는 C를 출력한다.
입출력 예 설명
입력 1
2
1 1
1
1
3 2
1 3 2
5 5
출력 1
S
B
💻내가 짠 코드
import sys
def find_winner(n, m, sejun, sebi):
if max(sejun) >= max(sebi):
return "S"
else:
return "B"
def main():
input = sys.stdin.read
data = input().strip().split("\n")
index = 0
T = int(data[index])
index += 1
results = []
for _ in range(T):
while index < len(data) and data[index] == "":
index += 1 # 빈 줄 건너뛰기
n, m = map(int, data[index].split())
index += 1
sejun = list(map(int, data[index].split()))
index += 1
sebi = list(map(int, data[index].split()))
index += 1
results.append(find_winner(n, m, sejun, sebi))
sys.stdout.write("\n".join(results) + "\n")
if __name__ == "__main__":
main()
✍ 접근 방법
- 최대 힘 비교: 각 진영에서 가장 강한 병사를 비교하여 결정
- 입력 처리:
- sys.stdin.read()를 사용하여 빠르게 입력을 처리합
- 여러 테스트 케이스 사이에 빈 줄이 있을 수 있으므로 이를 건너뛰도록 설정
- 출력 최적화: sys.stdout.write()를 사용하여 빠르게 결과를 출력
'Study > Python' 카테고리의 다른 글
[99클럽 코테 스터디] 25일차 TIL - 열심히 일하는 중 (0) | 2025.02.21 |
---|---|
[99클럽 코테 스터디] 24일차 TIL - 개미 (0) | 2025.02.20 |
[99클럽 코테 스터디] 22일차 TIL - 좌표 압축 (0) | 2025.02.18 |
[99클럽 코테 스터디] 20일차 TIL - 회전초밥 (0) | 2025.02.14 |
[99클럽 코테 스터디] 19일차 TIL - 절댓값 힙 (0) | 2025.02.14 |