항해30일
백준 1524번 문제
정렬
주어진 Python 코드는 두 군대의 병사들 간의 전투를 시뮬레이션하는 프로그램입니다. 각 군대의 병사들은 전투에서 서로의 힘을 비교하여 승패를 결정합니다. 아래는 코드에 대한 주석과 로직 설명, 사용된 메서드 정리입니다.
### 코드 설명 및 주석
```python
t = int(input()) # 테스트 케이스의 수를 입력받음
for i in range(t): # 각 테스트 케이스에 대해 반복
input() # 각 테스트 케이스는 줄 바꿈으로 구분 (사용되지 않음)
N, M = map(int, input().split()) # N(세준의 병사 수)과 M(세비의 병사 수)을 입력받음
sj = sorted(list(map(int, input().split())), reverse=True) # 세준의 병사 힘을 내림차순으로 정렬
sb = sorted(list(map(int, input().split())), reverse=True) # 세비의 병사 힘을 내림차순으로 정렬
while sj and sb: # 세준과 세비의 병사 리스트가 비어있지 않은 동안 반복
if sj[-1] >= sb[-1]: # 세준의 가장 약한 병사가 세비의 가장 약한 병사보다 같거나 크면
sb.pop() # 세비의 병사가 죽음 (리스트에서 제거)
else: # 세비의 병사가 더 강하면
sj.pop() # 세준의 병사가 죽음 (리스트에서 제거)
if sj: # 세준의 병사가 남아있으면
print('S') # 세준의 승리
elif sb: # 세비의 병사가 남아있으면
print('B') # 세비의 승리
else: # 두 군대의 병사가 모두 죽으면
print('C') # 무승부
```
### 로직 설명
1. **입력 처리**: 먼저 테스트 케이스의 수를 입력받고, 각 테스트 케이스에 대해 병사 수와 병사들의 힘을 입력받습니다.
2. **정렬**: 세준과 세비의 병사 힘을 내림차순으로 정렬하여 가장 강한 병사부터 비교할 수 있도록 합니다.
3. **전투 시뮬레이션**: 두 리스트가 모두 비어있지 않은 동안, 각 군대의 가장 약한 병사(리스트의 마지막 요소)를 비교합니다.
- 세준의 병사가 세비의 병사보다 같거나 강하면 세비의 병사가 죽고, 세비의 리스트에서 제거됩니다.
- 그렇지 않으면 세준의 병사가 죽고, 세준의 리스트에서 제거됩니다.
4. **결과 출력**: 전투가 끝난 후, 남아있는 병사 리스트를 확인하여 승자를 결정합니다.
- 세준의 병사가 남아있으면 'S'를 출력하고, 세비의 병사가 남아있으면 'B'를 출력합니다.
- 두 리스트가 모두 비어있으면 'C'를 출력하여 무승부를 나타냅니다.
### 사용한 메서드 정리
- `input()`: 사용자로부터 입력을 받는 함수.
- `map()`: 주어진 함수를 iterable의 각 요소에 적용하여 새로운 iterable을 생성하는 함수.
- `sorted()`: iterable을 정렬하여 새로운 리스트를 반환하는 함수. `reverse=True`를 사용하여 내림차순으로 정렬.
- `list()`: iterable을 리스트로 변환하는 함수.
- `pop()`: 리스트의 마지막 요소를 제거하고 그 값을 반환하는 메서드. 리스트가 비어있지 않을 때 사용해야 함.
이 코드는 병사들의 힘을 비교하여 전투의 결과를 효율적으로 결정하는 방식으로 설계되었습니다.