알고리즘 문제/풀어본 것

[프로그래머스] 숫자 게임 python (level 3)

GongHwaChun 2022. 10. 30. 17:40

https://school.programmers.co.kr/learn/courses/30/lessons/12987

1트

투 포인터지만 꼭 투포인터 형식으로 구현할 필요는 없다.
너무 형식에 얽매이지는 말자. 코드가 좀 길어진다.

내 풀이

# 2xN명의 사원들은 N명씩 두 팀으로 나눠 숫자게임
# A팀 B팀
# 1. 먼저 모든 사원이 무작위로 자연수를 하나씩 받음
# 2. 각 사원은 딱 한 번씩 경기를 함
# 3. 각 경기당 A팀에서 한 사원이, B팀에서 한 사원이 나와 서로의 수를 공개
# 그때 숫자가 큰 쪽이 승리 -> 승리한 팀이 승점 1점 얻음
# 숫자가 같다면 누구도 승점을 얻지 못한다.
# 1 <= A, B <= 100_000
# 각 원소는 1 <= 1_000_000_000

# 투 포인터 문제
# 1. A, B 정렬
# 2. A에 포인터 하나 B에 포인터 하나
# 3. A보다 B가 같거나 작으면 B의 포인터 +1(먼저 체크, 포인터가 B배열 밖으로 안 벗어나게 벗어나면 끝)
#   A보다 B가 크면 A와 B의 포인터 + 1((먼저 체크, 포인터가 A,B배열 밖으로 안 벗어나게 벗어나면 끝))
#   result += 1
# 4. 반복문 나오고 result 출력

def solution(A, B):
    a_idx = 0
    b_idx = 0
    answer = 0

    A.sort()
    B.sort()
    # while True:
    #     if a_idx >= len(A) or b_idx >= len(B):
    #         break
    #     elif A[a_idx] >= B[b_idx]:
    #         b_idx += 1
    #     elif A[a_idx] < B[b_idx]:
    #         a_idx += 1
    #         b_idx += 1
    #         answer += 1
    for b in B:
        a = A[a_idx]
        if a < b:
            a_idx += 1
            answer += 1
    return answer


print(solution([5,1,3,7]    ,[2,2,6,8]))
print(solution([2,2,2,2]    ,[1,1,1,1]))