상세 컨텐츠

본문 제목

항해30일차

본문

728x90
반응형

항해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()`: 리스트의 마지막 요소를 제거하고 그 값을 반환하는 메서드. 리스트가 비어있지 않을 때 사용해야 함.

이 코드는 병사들의 힘을 비교하여 전투의 결과를 효율적으로 결정하는 방식으로 설계되었습니다.

728x90
반응형

'<알고리즘 문제풀이& 연습> > 코딩테스트 연습' 카테고리의 다른 글

항해32일차  (2) 2024.11.29
항해31일차  (0) 2024.11.28
항해29일차  (2) 2024.11.26
항해28일차  (1) 2024.11.25
항해27일차  (1) 2024.11.24

관련글 더보기