항해 99클럽 코테
99클럽 코테 스터디 28일차 TIL
metamong-data
2024. 11. 27. 09:15
728x90
반응형
오늘의 학습 키워드
정렬
문제
세준이와 세비는 온라인 게임을 즐겨한다. 이 온라인 게임에서는 군대를 서로 키울 수 있다. 세준이는 N명의 병사를 키웠고, 세비는 M명의 병사를 키웠다.
이제 서로 전쟁을 하려고 한다.
전쟁은 여러 번의 전투로 이루어진다. 각 전투에서 살아있는 병사중 제일 약한 병사가 죽는다. 만약 제일 약한 병사가 여러 명이고, 제일 약한 병사가 모두 같은 편에 있다면, 그 중에 한 명이 임의로 선택되어 죽는다. 하지만, 제일 약한 병사가 여러 명이고, 양 편에 모두 있다면, 세비의 제일 약한 병사 중 한 명이 임의로 선택되어 죽는다.
전쟁은 한 명의 병사를 제외하고 모두 죽었을 때 끝난다. 전쟁의 승자를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 100보다 작거나 같다. 각 테스트 케이스는 다음과 같이 이루어져 있다. 첫째 줄에 N과 M이 들어오고, 둘째 줄에는 세준이의 병사들의 힘이 들어오고, 셋째 줄에는 세비의 병사들의 힘이 들어온다. 힘은 정수이고, 이 값이 클수록 강하고, 작을수록 약하다.
각 테스트 케이스는 줄 바꿈으로 구분되어 있다.
출력
각 테스트 케이스에 대해서 한 줄에 하나씩 차례대로 승자를 출력한다. 세준이가 이기면 S를 세비가 이기면 B를 둘다 아닐 경우에는 C를 출력한다.
제한
- 1 ≤ N, M ≤ 1,000,000
- 병사들의 힘은 300,000,000보다 작거나 같은 자연수이다.
예제 입력 1
2
1 1
1
1
3 2
1 3 2
5 5
예제 출력 1
S
B
풀이 과정
- 테스트 케이스의 수를 입력받아 정수로 변환한다.
- 테스트 케이스 수만큼 반복문을 실행한다.
- 빈 줄을 입력받아 무시한다.
- 공백으로 구분된 두 정수 N과 M을 입력받고, map 함수로 문자열을 정수로 변환한다.
- 공백으로 구분된 숫자들을 입력받아 정수 리스트로 변환한고, reverse=True로 내림차순 정렬합니다.
- 두 번째 숫자 리스트도 같은 방식으로 입력받아 내림차순 정렬한다.
- sj와 sb 리스트가 모두 비어있지 않은 동안 반복 한다.
- sj의 가장 작은 값이 sb의 가장 작은 값보다 크거나 같은지 확인한다.
- sb의 마지막 원소를 제거한다.
- 조건이 거짓이면 sj의 마지막 원소를 제거한다.
- 반복이 끝난 후:
- sj가 비어있지 않으면 'S' 출력
- sb가 비어있지 않으면 'B' 출력
- 둘 다 비어있으면 'C' 출력
제출 코드 (python)
t = int(input())
for i in range(t) :
input()
N, M = map(int, input().split())
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')
오늘의 회고
- sorted를 이용한 정렬 방법을 응용했다
728x90