항해 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

풀이 과정

  1. 테스트 케이스의 수를 입력받아 정수로 변환한다.
  2. 테스트 케이스 수만큼 반복문을 실행한다.
  3. 빈 줄을 입력받아 무시한다.
  4. 공백으로 구분된 두 정수 N과 M을 입력받고, map 함수로 문자열을 정수로 변환한다.
  5. 공백으로 구분된 숫자들을 입력받아 정수 리스트로 변환한고, reverse=True로 내림차순 정렬합니다.
  6. 두 번째 숫자 리스트도 같은 방식으로 입력받아 내림차순 정렬한다.
  7. sj와 sb 리스트가 모두 비어있지 않은 동안 반복 한다.
  8. sj의 가장 작은 값이 sb의 가장 작은 값보다 크거나 같은지 확인한다.
  9. sb의 마지막 원소를 제거한다.
  10. 조건이 거짓이면 sj의 마지막 원소를 제거한다.
  11. 반복이 끝난 후:
    • 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를 이용한 정렬 방법을 응용했다

참고 링크 : https://www.acmicpc.net/problem/1524

728x90