Programmers
[Lv.3] 숫자게임
dev-minchur
2025. 1. 11. 15:02
프로그래머스의 "숫자게임" 문제는 A,B 두팀에서 B의 팀이 최대 승점을 구하는 문제입니다. 각각 두팀은 무작위로 자연수를 하나씩 부여 받고, A팀의 출전 순서는 B팀에게 공개를 합니다.
문제 분석
- 모든 사원이 무작위로 자연수를 하나씩 부여받습니다.
- 각 사원은 딱 한 번씩 경기를 합니다.
- 각 경기당 A팀에서 한 사원이, B팀에서 한 사원이 나와 서로의 수를 공개합니다. 그때 숫자가 큰 쪽이 승리하게 되고, 승리한 사원이 속한 팀은 승점을 1점 얻게 됩니다.
- 만약 숫자가 같다면 누구도 승점을 얻지 못합니다.
해결 방법
A,B 두 리스트를 정렬을 하여 B의 값이 큰 경우에만 승점을 포함시키고 인덱스 번호를 증가 시켜 승점을 계산합니다.
1차 문제 풀이 (틀림)
def solution(A, B):
sort_a, sort_b = sorted(A), sorted(B)
answer = 0
index_a = 0
for b in sort_b:
if index_a < len(sort_a) and sort_a[index_a] < b:
answer += 1
index_a += 1
elif index_a < len(sort_a) and sort_a[index_a] == b:
index_a += 1
return answer
2차 문제풀이 (정답)
def solution(A, B):
A.sort()
B.sort()
points = 0
j = 0
for a in A:
while j < len(B) and B[j] <= a:
j += 1
if j < len(B):
points += 1
j += 1
return points
- A와 B를 정렬합니다.
- 점수와 B팀의 인덱스값 따로 변수로 설정합니다.
- A팀의 각 숫자에 대해 B팀의 적절한 숫자를 찾습니다.
- B팀의 현재 숫자가 A팀의 숫자보다 작거나 같은 경우, 다음 숫자를 찾습니다.
- B팀의 현재 숫자가 A팀의 숫자보다 큰 경우, 점수를 얻습니다.