[ BOJ / Python ] 2831번 댄스 파티

황승환·2022년 7월 9일
0

Python

목록 보기
356/498


이번 문제는 그리디 알고리즘과 투포인터 알고리즘을 활용하여 해결하였다. 값의 정렬이 필요하다고 바로 알 수 있었고, 정렬 방법에 대해 고민을 해보았다. 고민 끝에 남자와 여자 모두 오름차순으로 정렬을 하고, 포인터를 두개 사용하여 값을 비교하기로 하였다.

남자의 포인터 mp는 0부터 시작하고, 여자의 포인터 wp는 n-1부터 시작한다.

mp를 기준으로 mp번째 남자가 음수일 경우, wp번째 여자가 양수라면 비교를 시작한다. 두 절댓값을 비교하여 남자의 값이 더 클 경우 결과 변수를 1 증가시키고, mp를 +1, wp를 -1해준다. 같거나 여자가 더 클 경우에는 wp를 -1해준다. 남자와 여자 모두 음수일 경우에는 mp를 +1해주도록 하였다.

mp를 기준으로 mp번째 남자가 양수일 경우, wp번째 여자가 음수라면 비교를 시작한다. 두 절댓값을 비교하여 남자의 값이 더 작을 경우 결과 변수를 1 증가시키고, mp를 +1, wp를 -1해준다. 같거나 여자가 더 작을 경우에는 wp를 -1해준다. 남자와 여자 모두 양수일 경우에는 wp를 -1해주도록 하였다.

Code

n = int(input())
man = sorted(list(map(int, input().split())))
woman = sorted(list(map(int, input().split())))
mp, wp = 0, n-1
answer = 0
while mp < n and wp >= 0:
    if man[mp] < 0:
        if woman[wp] > 0:
            if abs(man[mp]) > abs(woman[wp]):
                answer += 1
                mp += 1
                wp -= 1
            else:
                wp -= 1
        else:
            mp += 1
    else:
        if woman[wp] < 0:
            if abs(man[mp]) < abs(woman[wp]):
                answer += 1
                mp += 1
                wp -= 1
            else:
                wp -= 1
        else:
            wp -= 1
print(answer)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글