본문 바로가기
Algorithm/프로그래머스

[프로그래머스] 파이썬 문제풀이 - 숫자 게임

by whdgus928 2023. 5. 6.

첫 풀이

1. A를 앞으로 한칸씩 땡기기

2. A와 B를 전체 비교

3. 이중 for문으로 len(A)만큼 돌리는거라 시간이 괜찮을까 걱정했다

 

def solution(A, B):
    answer = -1
    A.sort(reverse=True)
    B.sort(reverse=True)
    m=-123
    for i in range(len(A)):
        cnt=0
        for j in range(len(A)):
            if A[j]<B[j]:
                cnt+=1
        if cnt>m:
            m=cnt
        if cnt<m:
            break
        tmp=A.pop(0)
        A.append(tmp)
    return m

효율성 테스트에서 실패했다

 

더 나은 답안

1. 생각보다 간단한 문제였다 a가 고정이지만 사실 b를 맞쳐서 내면 되기때문에 순서를 바꿀 수 있다

2. a와b를 정렬하고 앞에서부터 비교한다

3. b가 a보다 크다면 1점 올리고 b 인덱스를 더해 다음 원소와 비교한다

4. b가 작다면 버리는 카드다

 

def solution(A, B):
    answer = 0
    A.sort(reverse=True)
    B.sort(reverse=True)
    m=-123
    idx=0
    for i in range(len(A)):
        if A[i]>=B[idx]:
            continue
        else:
            answer+=1
            B.pop(0)
    return answer

 

배운 점

1. 범위가 큰데 이중 for문에 리스트 전체를 탐색하면 연산시간이 오바할 수가 있다.

2. 간단하게 바꿀 수 있는 부분을 찾는다

반응형

댓글